This is Kara’s first pass at looking at the Packet 7 data (with data from 2019-03-18). (Note: PDF printed portrait, 80% zoom, minimum margins.)
Confirmatory hypotheses (as specified in preregistration)
Note: I included all participants, even if they failed attention checks, since we did not specify that we would exclude participants in the preregistration. At some point we should try running everything on the subset of participants who passed all attention checks just so that we know, but this decreases our sample sizes pretty dramatically.
Hypothesis #1
Hypothesis #1: People who score higher on the Tellegen Absorption Scale (Tellegen & Atkinson, 1974) also report more spiritual experiences.
Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using absorption scores to predict reports of spiritual experiences, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ absorption * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). Our prediction is that the main effect of absorption on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)
If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ absorption * scale + (1 | site/subject)."
Here are our results:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
-0.07 |
0.03 |
594 |
-2.36 |
0.019 |
* |
| abs |
0.27 |
0.03 |
594 |
8.66 |
<0.001 |
* |
| p7_ctry1 |
-0.32 |
0.06 |
594 |
-5.55 |
<0.001 |
* |
| p7_ctry2 |
0.79 |
0.05 |
594 |
16.70 |
<0.001 |
* |
| p7_ctry3 |
-0.13 |
0.06 |
594 |
-2.26 |
0.024 |
* |
| p7_ctry4 |
-0.91 |
0.07 |
594 |
-13.74 |
<0.001 |
* |
| scale1 |
0.00 |
0.02 |
594 |
0.15 |
0.878 |
|
| abs:p7_ctry1 |
-0.02 |
0.05 |
594 |
-0.43 |
0.669 |
|
| abs:p7_ctry2 |
0.23 |
0.05 |
594 |
4.93 |
<0.001 |
* |
| abs:p7_ctry3 |
0.06 |
0.07 |
594 |
0.89 |
0.372 |
|
| abs:p7_ctry4 |
-0.10 |
0.08 |
594 |
-1.35 |
0.178 |
|
| abs:scale1 |
-0.02 |
0.02 |
594 |
-0.86 |
0.391 |
|
| p7_ctry1:scale1 |
-0.04 |
0.03 |
594 |
-1.16 |
0.246 |
|
| p7_ctry2:scale1 |
-0.05 |
0.03 |
594 |
-1.84 |
0.066 |
|
| p7_ctry3:scale1 |
0.10 |
0.04 |
594 |
2.82 |
0.005 |
* |
| p7_ctry4:scale1 |
-0.20 |
0.04 |
594 |
-5.06 |
<0.001 |
* |
| abs:p7_ctry1:scale1 |
-0.02 |
0.03 |
594 |
-0.72 |
0.47 |
|
| abs:p7_ctry2:scale1 |
-0.03 |
0.03 |
594 |
-1.24 |
0.215 |
|
| abs:p7_ctry3:scale1 |
0.01 |
0.04 |
594 |
0.23 |
0.821 |
|
| abs:p7_ctry4:scale1 |
0.04 |
0.05 |
594 |
0.80 |
0.427 |
|
We found evidence in favor of Hypothesis #1: As predicted, the main effect of absorption was significantly positive (see bolded row in table above).
For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.27 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 7.24 points on the Absorption scale (range: 0-34), participants (on average) increased by 4.56 points on the Daily Spiritual Experiences scale (range: 0-70) or 4.79 points on the Spiritual Events scale (range: 0-80).

Hypothesis #2
Hypothesis #2: People who score higher on our two porosity indices also report more spiritual experiences.
Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using porosity scores (from each of our two indices) to predict reports of spiritual experiences across the 2 spiritual experience scales included in our survey packet, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ porosity * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). We will run two versions of this model, one using each of the two “porosity” measures described above. For each regression, our prediction is that the main effect of porosity on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)
If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ porosity * scale + (1 | site/subject)."
Here are our results, using the Porosity scale (Dulin):
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
-0.04 |
0.04 |
594 |
-1.13 |
0.258 |
|
| por |
0.43 |
0.04 |
594 |
12.00 |
<0.001 |
* |
| p7_ctry1 |
-0.12 |
0.06 |
594 |
-1.94 |
0.052 |
|
| p7_ctry2 |
0.32 |
0.05 |
594 |
6.27 |
<0.001 |
* |
| p7_ctry3 |
-0.10 |
0.06 |
594 |
-1.56 |
0.119 |
|
| p7_ctry4 |
-0.51 |
0.08 |
594 |
-6.14 |
<0.001 |
* |
| scale1 |
0.02 |
0.02 |
594 |
0.99 |
0.324 |
|
| por:p7_ctry1 |
0.12 |
0.06 |
594 |
2.03 |
0.043 |
* |
| por:p7_ctry2 |
0.18 |
0.05 |
594 |
3.66 |
<0.001 |
* |
| por:p7_ctry3 |
-0.06 |
0.07 |
594 |
-0.89 |
0.373 |
|
| por:p7_ctry4 |
-0.02 |
0.08 |
594 |
-0.25 |
0.802 |
|
| por:scale1 |
0.02 |
0.02 |
594 |
0.92 |
0.356 |
|
| p7_ctry1:scale1 |
-0.06 |
0.04 |
594 |
-1.54 |
0.124 |
|
| p7_ctry2:scale1 |
0.01 |
0.03 |
594 |
0.26 |
0.794 |
|
| p7_ctry3:scale1 |
0.09 |
0.04 |
594 |
2.26 |
0.024 |
* |
| p7_ctry4:scale1 |
-0.12 |
0.05 |
594 |
-2.27 |
0.024 |
* |
| por:p7_ctry1:scale1 |
-0.01 |
0.04 |
594 |
-0.20 |
0.842 |
|
| por:p7_ctry2:scale1 |
-0.17 |
0.03 |
594 |
-5.23 |
<0.001 |
* |
| por:p7_ctry3:scale1 |
0.00 |
0.05 |
594 |
0.01 |
0.989 |
|
| por:p7_ctry4:scale1 |
0.09 |
0.05 |
594 |
1.76 |
0.079 |
|
And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
-0.05 |
0.03 |
594 |
-1.40 |
0.163 |
|
| mm |
0.32 |
0.04 |
594 |
8.76 |
<0.001 |
* |
| p7_ctry1 |
-0.07 |
0.06 |
594 |
-1.15 |
0.252 |
|
| p7_ctry2 |
0.33 |
0.05 |
594 |
6.42 |
<0.001 |
* |
| p7_ctry3 |
-0.17 |
0.06 |
594 |
-2.86 |
0.004 |
* |
| p7_ctry4 |
-0.64 |
0.08 |
594 |
-8.07 |
<0.001 |
* |
| scale1 |
0.02 |
0.02 |
594 |
1.28 |
0.202 |
|
| mm:p7_ctry1 |
0.15 |
0.06 |
594 |
2.38 |
0.018 |
* |
| mm:p7_ctry2 |
0.14 |
0.05 |
594 |
2.90 |
0.004 |
* |
| mm:p7_ctry3 |
-0.06 |
0.07 |
594 |
-0.92 |
0.356 |
|
| mm:p7_ctry4 |
0.01 |
0.09 |
594 |
0.06 |
0.95 |
|
| mm:scale1 |
-0.04 |
0.02 |
594 |
-1.78 |
0.076 |
|
| p7_ctry1:scale1 |
-0.11 |
0.04 |
594 |
-2.85 |
0.005 |
* |
| p7_ctry2:scale1 |
0.04 |
0.03 |
594 |
1.45 |
0.148 |
|
| p7_ctry3:scale1 |
0.07 |
0.03 |
594 |
2.13 |
0.034 |
* |
| p7_ctry4:scale1 |
-0.18 |
0.05 |
594 |
-3.78 |
<0.001 |
* |
| mm:p7_ctry1:scale1 |
-0.04 |
0.04 |
594 |
-1.09 |
0.276 |
|
| mm:p7_ctry2:scale1 |
-0.14 |
0.03 |
594 |
-4.82 |
<0.001 |
* |
| mm:p7_ctry3:scale1 |
0.02 |
0.04 |
594 |
0.53 |
0.599 |
|
| mm:p7_ctry4:scale1 |
0.10 |
0.05 |
594 |
1.82 |
0.07 |
|
In both cases, we found evidence in favor of Hypothesis #2: As predicted, the main effect of porosity was significantly positive in both regression analyses (see bolded rows in tables above).
For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.43 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 7.63 points on the Porosity scale (range: 0-34), participants (on average) increased by 7.14 points on the Daily Spiritual Experiences scale (range: 0-70) or 7.51 points on the Spiritual Events scale (range: 0-80).
For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.32 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 11.66 points on the Martha Story scale (range: 0-54), participants (on average) increased by 5.38 points on the Daily Spiritual Experiences scale (range: 0-70) or 5.66 points on the Spiritual Events scale (range: 0-80).


Hypothesis #3
Hypothesis #3: The positive relationship between absorption and experience is statistically significant in each field site individually.
Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #1 to assess the relationship[] between absorption and spiritual experience […] in each field site individually. For Hypothesis #3, our models will take the following form: experience ~ absorption * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”
Here are our results:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.09 |
100 |
0.00 |
1 |
|
| abs |
0.30 |
0.09 |
100 |
3.40 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
100 |
0.00 |
1 |
|
| abs:scale1 |
-0.06 |
0.04 |
100 |
-1.67 |
0.097 |
|
| Ghana |
| (Intercept) |
0.00 |
0.05 |
197 |
0.00 |
1 |
|
| abs |
0.53 |
0.05 |
197 |
10.48 |
<0.001 |
* |
| scale1 |
0.00 |
0.03 |
197 |
0.00 |
1 |
|
| abs:scale1 |
0.03 |
0.03 |
197 |
0.79 |
0.433 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| abs |
0.40 |
0.08 |
109 |
5.31 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
109 |
0.00 |
1 |
|
| abs:scale1 |
-0.03 |
0.05 |
109 |
-0.61 |
0.546 |
|
| China |
| (Intercept) |
0.00 |
0.09 |
98 |
0.00 |
1 |
|
| abs |
0.26 |
0.09 |
98 |
3.00 |
0.003 |
* |
| scale1 |
0.00 |
0.04 |
98 |
0.00 |
1 |
|
| abs:scale1 |
-0.02 |
0.04 |
98 |
-0.41 |
0.684 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| abs |
0.15 |
0.08 |
90 |
1.74 |
0.085 |
|
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| abs:scale1 |
0.01 |
0.06 |
90 |
0.14 |
0.892 |
|
We found evidence in favor of Hypothesis #3 in all sites except Vanuatu: As predicted, the main effect of absorption was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (although some would consider the effect “marginally significant”; see bolded rows in table above).

(See other relevant plots under “Hypothesis #1,” above.)
Hypothesis #4
Hypothesis #4: The positive relationship between absorption and experience is statistically significant in each field site individually.
Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #2 to assess the relationship[…] between porosity and experience in each field site individually. […] For Hypothesis #4, our models will take the following form: experience ~ porosity * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”
Here are our results, using the Porosity scale (Dulin):
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| por |
0.54 |
0.07 |
100 |
7.30 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
100 |
0.00 |
1 |
|
| por:scale1 |
-0.02 |
0.04 |
100 |
-0.49 |
0.628 |
|
| Ghana |
| (Intercept) |
0.00 |
0.05 |
197 |
0.00 |
1 |
|
| por |
0.57 |
0.05 |
197 |
11.72 |
<0.001 |
* |
| scale1 |
0.00 |
0.03 |
197 |
0.00 |
1 |
|
| por:scale1 |
-0.05 |
0.03 |
197 |
-1.55 |
0.122 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| por |
0.41 |
0.07 |
109 |
5.52 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
109 |
0.00 |
1 |
|
| por:scale1 |
0.00 |
0.05 |
109 |
0.10 |
0.917 |
|
| China |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| por |
0.54 |
0.07 |
98 |
7.34 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
98 |
0.00 |
1 |
|
| por:scale1 |
0.05 |
0.04 |
98 |
1.14 |
0.257 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| por |
0.19 |
0.08 |
90 |
2.25 |
0.027 |
* |
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| por:scale1 |
0.11 |
0.06 |
90 |
1.83 |
0.07 |
|
Using the Porosity scale, We found evidence in favor of Hypothesis #4 in all sites: As predicted, the main effect of porosity was significantly positive in the US, Ghana, Thailand, China, and Vanuatu (see bolded rows in table above).

And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.08 |
100 |
0.00 |
1 |
|
| mm |
0.49 |
0.08 |
100 |
6.36 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
100 |
0.00 |
1 |
|
| mm:scale1 |
-0.11 |
0.04 |
100 |
-2.93 |
0.004 |
* |
| Ghana |
| (Intercept) |
0.00 |
0.05 |
197 |
0.00 |
1 |
|
| mm |
0.47 |
0.05 |
197 |
8.76 |
<0.001 |
* |
| scale1 |
0.00 |
0.03 |
197 |
0.00 |
1 |
|
| mm:scale1 |
-0.12 |
0.03 |
197 |
-3.59 |
<0.001 |
* |
| Thailand |
| (Intercept) |
0.00 |
0.08 |
109 |
0.00 |
1 |
|
| mm |
0.33 |
0.08 |
109 |
4.17 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
109 |
0.00 |
1 |
|
| mm:scale1 |
-0.04 |
0.05 |
109 |
-0.83 |
0.411 |
|
| China |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| mm |
0.38 |
0.08 |
98 |
4.68 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
98 |
0.00 |
1 |
|
| mm:scale1 |
0.00 |
0.04 |
98 |
0.04 |
0.968 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.09 |
90 |
0.00 |
1 |
|
| mm |
0.09 |
0.09 |
90 |
1.07 |
0.288 |
|
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| mm:scale1 |
0.03 |
0.06 |
90 |
0.48 |
0.632 |
|
Using the Martha Story scale, We found evidence in favor of Hypothesis #4 in all sites except Vanuatu: As predicted, the main effect of Martha Story was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (see bolded rows in table above).

(See other relevant plots under “Hypothesis #2,” above.)
Secondary exploratory analyses
“Secular” experiences
From preregistration: “First, in order to explore the question of whether affirmation of spiritual experience, porosity and absorption are simply due to the religiosity of participants, we will conduct additional analyses focusing on the two “secular” experience scales (the revised Launay Slade scale, Morrison, Wells and Nothard 2000]; and the Sheep-Goat [paranormal] scale, Thalborne & Delin, 1993). These analyses will be identical to the primary analyses outlined above, except that they will only include these two “secular experience” scales and not the two spiritual experience scales. We consider these to be exploratory analyses.”
Parallel to Hypothesis #1
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
-0.05 |
0.03 |
594 |
-1.63 |
0.104 |
|
| abs |
0.40 |
0.03 |
594 |
11.68 |
<0.001 |
* |
| p7_ctry1 |
0.04 |
0.06 |
594 |
0.66 |
0.513 |
|
| p7_ctry2 |
0.43 |
0.05 |
594 |
8.31 |
<0.001 |
* |
| p7_ctry3 |
-0.09 |
0.06 |
594 |
-1.48 |
0.14 |
|
| p7_ctry4 |
-0.27 |
0.07 |
594 |
-3.69 |
<0.001 |
* |
| scale1 |
0.01 |
0.03 |
594 |
0.53 |
0.594 |
|
| abs:p7_ctry1 |
0.08 |
0.06 |
594 |
1.26 |
0.208 |
|
| abs:p7_ctry2 |
0.06 |
0.05 |
594 |
1.16 |
0.248 |
|
| abs:p7_ctry3 |
0.03 |
0.08 |
594 |
0.42 |
0.678 |
|
| abs:p7_ctry4 |
0.01 |
0.08 |
594 |
0.12 |
0.903 |
|
| abs:scale1 |
0.02 |
0.03 |
594 |
0.66 |
0.509 |
|
| p7_ctry1:scale1 |
-0.20 |
0.05 |
594 |
-4.07 |
<0.001 |
* |
| p7_ctry2:scale1 |
-0.14 |
0.04 |
594 |
-3.40 |
<0.001 |
* |
| p7_ctry3:scale1 |
0.19 |
0.05 |
594 |
3.74 |
<0.001 |
* |
| p7_ctry4:scale1 |
0.07 |
0.06 |
594 |
1.30 |
0.193 |
|
| abs:p7_ctry1:scale1 |
0.01 |
0.05 |
594 |
0.30 |
0.762 |
|
| abs:p7_ctry2:scale1 |
-0.08 |
0.04 |
594 |
-1.93 |
0.055 |
|
| abs:p7_ctry3:scale1 |
0.05 |
0.06 |
594 |
0.87 |
0.383 |
|
| abs:p7_ctry4:scale1 |
0.02 |
0.07 |
594 |
0.24 |
0.812 |
|
In parallel to Hypothesis #1, the relationship between absorption and secular experience was also significantly positive (see bolded row table above).
For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.4 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 7.24 points on the Absorption scale (range: 0-34), participants (on average) increased by 1.52 points on the Uncommon Events scale (range: 0-18) or 0.8 points on the Extrasensory scale (range: 0-7).
This was actually a (numerically) stronger effect than what we documented for spiritual experiences (b = 0.4 vs. b = 0.27). We did not provide a prediction about whether or not this would be the case in the preregistration.

Parallel to Hypothesis #2
Here are our results, using the Porosity scale (Dulin):
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.06 |
0.04 |
594 |
1.57 |
0.117 |
|
| por |
0.51 |
0.04 |
594 |
12.48 |
<0.001 |
* |
| p7_ctry1 |
0.22 |
0.07 |
594 |
3.12 |
0.002 |
* |
| p7_ctry2 |
-0.08 |
0.06 |
594 |
-1.34 |
0.18 |
|
| p7_ctry3 |
-0.17 |
0.07 |
594 |
-2.40 |
0.017 |
* |
| p7_ctry4 |
0.42 |
0.10 |
594 |
4.41 |
<0.001 |
* |
| scale1 |
0.15 |
0.03 |
594 |
4.50 |
<0.001 |
* |
| por:p7_ctry1 |
0.15 |
0.07 |
594 |
2.10 |
0.036 |
* |
| por:p7_ctry2 |
0.01 |
0.06 |
594 |
0.12 |
0.901 |
|
| por:p7_ctry3 |
-0.14 |
0.08 |
594 |
-1.70 |
0.089 |
|
| por:p7_ctry4 |
0.20 |
0.09 |
594 |
2.23 |
0.026 |
* |
| por:scale1 |
0.15 |
0.03 |
594 |
4.53 |
<0.001 |
* |
| p7_ctry1:scale1 |
-0.29 |
0.05 |
594 |
-5.36 |
<0.001 |
* |
| p7_ctry2:scale1 |
-0.21 |
0.05 |
594 |
-4.63 |
<0.001 |
* |
| p7_ctry3:scale1 |
0.13 |
0.06 |
594 |
2.43 |
0.015 |
* |
| p7_ctry4:scale1 |
0.39 |
0.07 |
594 |
5.20 |
<0.001 |
* |
| por:p7_ctry1:scale1 |
-0.04 |
0.05 |
594 |
-0.71 |
0.481 |
|
| por:p7_ctry2:scale1 |
-0.24 |
0.04 |
594 |
-5.31 |
<0.001 |
* |
| por:p7_ctry3:scale1 |
0.09 |
0.06 |
594 |
1.44 |
0.15 |
|
| por:p7_ctry4:scale1 |
0.36 |
0.07 |
594 |
5.10 |
<0.001 |
* |
And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.06 |
0.04 |
594 |
1.55 |
0.121 |
|
| mm |
0.39 |
0.04 |
594 |
9.55 |
<0.001 |
* |
| p7_ctry1 |
0.30 |
0.07 |
594 |
4.29 |
<0.001 |
* |
| p7_ctry2 |
-0.12 |
0.06 |
594 |
-2.15 |
0.032 |
* |
| p7_ctry3 |
-0.24 |
0.06 |
594 |
-3.77 |
<0.001 |
* |
| p7_ctry4 |
0.18 |
0.09 |
594 |
2.10 |
0.036 |
* |
| scale1 |
0.10 |
0.03 |
594 |
3.55 |
<0.001 |
* |
| mm:p7_ctry1 |
0.23 |
0.07 |
594 |
3.33 |
<0.001 |
* |
| mm:p7_ctry2 |
0.11 |
0.05 |
594 |
2.08 |
0.038 |
* |
| mm:p7_ctry3 |
-0.14 |
0.08 |
594 |
-1.80 |
0.073 |
|
| mm:p7_ctry4 |
0.18 |
0.10 |
594 |
1.78 |
0.076 |
|
| mm:scale1 |
0.07 |
0.03 |
594 |
2.25 |
0.025 |
* |
| p7_ctry1:scale1 |
-0.25 |
0.05 |
594 |
-4.68 |
<0.001 |
* |
| p7_ctry2:scale1 |
-0.11 |
0.04 |
594 |
-2.60 |
0.009 |
* |
| p7_ctry3:scale1 |
0.12 |
0.05 |
594 |
2.45 |
0.015 |
* |
| p7_ctry4:scale1 |
0.23 |
0.07 |
594 |
3.41 |
<0.001 |
* |
| mm:p7_ctry1:scale1 |
-0.01 |
0.05 |
594 |
-0.26 |
0.794 |
|
| mm:p7_ctry2:scale1 |
-0.23 |
0.04 |
594 |
-5.49 |
<0.001 |
* |
| mm:p7_ctry3:scale1 |
0.07 |
0.06 |
594 |
1.11 |
0.266 |
|
| mm:p7_ctry4:scale1 |
0.29 |
0.08 |
594 |
3.60 |
<0.001 |
* |
In parallel to Hypothesis #2, in both cases, the relationship between porosity and secular experience was significantly positive (see bolded rows in tables above).
For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.51 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 7.63 points on the Porosity scale (range: 0-34), participants (on average) increased by 1.93 points on the Uncommon Events scale (range: 0-18) or 1.01 points on the Extrasensory scale (range: 0-7).
For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.39 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 11.66 points on the Martha Story scale (range: 0-54), participants (on average) increased by 1.46 points on the Uncommon Events scale (range: 0-18) or 0.76 points on the Extrasensory scale (range: 0-7).
These were actually (numerically) stronger effects than what we documented for spiritual experiences (Porosity: b = 0.51 vs. b = 0.43; Martha Story: b = 0.39 vs. b = 0.32). We did not provide a prediction about whether or not this would be the case in the preregistration.


Parallel to Hypothesis #3
Here are our results:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| abs |
0.46 |
0.07 |
100 |
6.50 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
100 |
0.00 |
1 |
|
| abs:scale1 |
0.00 |
0.05 |
100 |
0.09 |
0.93 |
|
| Ghana |
| (Intercept) |
0.00 |
0.05 |
197 |
0.00 |
1 |
|
| abs |
0.46 |
0.05 |
197 |
9.05 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
197 |
0.00 |
1 |
|
| abs:scale1 |
0.01 |
0.04 |
197 |
0.16 |
0.873 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| abs |
0.41 |
0.07 |
109 |
6.03 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
109 |
0.00 |
1 |
|
| abs:scale1 |
0.02 |
0.06 |
109 |
0.40 |
0.693 |
|
| China |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| abs |
0.36 |
0.07 |
98 |
5.12 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| abs:scale1 |
-0.07 |
0.06 |
98 |
-1.13 |
0.263 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| abs |
0.27 |
0.08 |
90 |
3.37 |
0.001 |
* |
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| abs:scale1 |
-0.02 |
0.06 |
90 |
-0.37 |
0.709 |
|
In parallel to Hypothesis #3, the relationship between absorption and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #1,” above.)
Parallel to Hypothesis #4
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| por |
0.53 |
0.07 |
100 |
8.03 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
100 |
0.00 |
1 |
|
| por:scale1 |
0.06 |
0.05 |
100 |
1.07 |
0.286 |
|
| Ghana |
| (Intercept) |
0.00 |
0.05 |
197 |
0.00 |
1 |
|
| por |
0.46 |
0.05 |
197 |
9.07 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
197 |
0.00 |
1 |
|
| por:scale1 |
-0.02 |
0.04 |
197 |
-0.42 |
0.674 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| por |
0.32 |
0.07 |
109 |
4.37 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
109 |
0.00 |
1 |
|
| por:scale1 |
0.18 |
0.05 |
109 |
3.37 |
0.001 |
* |
| China |
| (Intercept) |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| por |
0.46 |
0.06 |
98 |
7.13 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| por:scale1 |
0.25 |
0.06 |
98 |
4.31 |
<0.001 |
* |
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| por |
0.23 |
0.08 |
90 |
2.80 |
0.006 |
* |
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| por:scale1 |
-0.05 |
0.06 |
90 |
-0.87 |
0.384 |
|
In parallel to Hypothesis #4, using the Porosity (Dulin) scale, the relationship between porosity and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| mm |
0.52 |
0.07 |
100 |
7.82 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
100 |
0.00 |
1 |
|
| mm:scale1 |
0.02 |
0.05 |
100 |
0.35 |
0.726 |
|
| Ghana |
| (Intercept) |
0.00 |
0.05 |
197 |
0.00 |
1 |
|
| mm |
0.47 |
0.05 |
197 |
9.57 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
197 |
0.00 |
1 |
|
| mm:scale1 |
-0.09 |
0.04 |
197 |
-2.41 |
0.017 |
* |
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| mm |
0.24 |
0.07 |
109 |
3.16 |
0.002 |
* |
| scale1 |
0.00 |
0.05 |
109 |
0.00 |
1 |
|
| mm:scale1 |
0.11 |
0.05 |
109 |
2.02 |
0.046 |
* |
| China |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| mm |
0.33 |
0.07 |
98 |
4.58 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| mm:scale1 |
0.14 |
0.06 |
98 |
2.30 |
0.024 |
* |
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| mm |
0.01 |
0.08 |
90 |
0.06 |
0.95 |
|
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| mm:scale1 |
-0.03 |
0.06 |
90 |
-0.47 |
0.636 |
|
In parallel to Hypothesis #4, using the Martha Story scale, the relationship between porosity and secular experience was significantly positive in all sites except Vanuatu (where the relationship with spiritual experience was also not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #2,” above.)
“Control” scales (Hypothesis #5)
From preregistration: “Second, in order to examine whether the hypothesized relationships between absorption and experience and between porosity and experience can be explained by a lower-level processes—namely, individual or cross-cultural differences in an overall tendency to agree with the questions posed by these scales (i.e., a “yes” bias), we will also examine the relationships between the two “control” scales (the Sense of Control scale, Lachman & Weaver, 1998; and the Need for Cognition scale, Cacioppo, Petty, & Kao, 1993) and our measures of absorption, porosity, and experience. This provides something of a negative control for our primary hypotheses. Our prediction is that any relationships with these control measures will be weaker than the relationships among absorption, porosity, and experience. To assess this, we will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using scores on absorption, porosity, and control scales to predict reports of spiritual experiences. Using the “stats” package for R, we will specify this model as follows: experience ~ score * predictor * site + (1 | subject), where “site” is a categorical variable comparing the five field sites (effect-coded), and—critically—“predictor” is a categorical variable with the following orthogonal contrasts: (1) Scales of interest (absorption and the two porosity measures) vs. control scales; (2) absorption vs. porosity measures; (3) porosity as indexed by the Dulin scale vs. porosity as indexed by the Mental Causation scale; (4) Need for Cognition vs. Need for Control (Mastery Subscale). Because of the unusual and complex formulation of this model—considering each of these 5 “predictors” as repeated observations of the variable “score”—we will conduct separate models for the two spiritual experience scales (Daily Spiritual Experiences and Spiritual Events), rather than incorporating both spiritual experiences measures into the same model (as in Hypotheses #1-4). As in Hypotheses #1-4, if we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ score * predictor + (1 | site/subject). We consider these to be confirmatory tests, and in each case our prediction is that the two-way interaction between “score” and the first orthogonal contrast on “predictor” (comparing the predictive power of our scales of interest vs. our two control scales) will be significantly positive (b > 0, t > 2, p < 0.05).”
Although we did not number this hypothesis in the preregistration, I’m going to go ahead and call it Hypothesis #5.
NOTE: Neither of the models we specified in the preregistration were able to run. I think this is due to an error in my thinking (about which of our measures were “repeated measures”). The models reported here are very close to what we preregistered.
Here are our results using the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
-0.06 |
0.02 |
-3.55 |
<0.001 |
* |
| score |
0.22 |
0.02 |
11.37 |
<0.001 |
* |
| predictorint_ctl |
0.01 |
0.01 |
1.87 |
0.062 |
|
| predictorabs_pmm |
-0.02 |
0.01 |
-1.06 |
0.289 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.05 |
0.958 |
|
| predictorhthk_wob |
0.02 |
0.03 |
0.65 |
0.517 |
|
| p7_ctry1 |
-0.30 |
0.03 |
-9.18 |
<0.001 |
* |
| p7_ctry2 |
0.53 |
0.03 |
20.42 |
<0.001 |
* |
| p7_ctry3 |
-0.05 |
0.04 |
-1.44 |
0.15 |
|
| p7_ctry4 |
-0.90 |
0.04 |
-24.01 |
<0.001 |
* |
| score:predictorint_ctl |
0.06 |
0.01 |
7.24 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.04 |
0.02 |
-2.31 |
0.021 |
* |
| score:predictorpor_mm |
0.08 |
0.03 |
2.68 |
0.007 |
* |
| score:predictorhthk_wob |
0.05 |
0.03 |
1.51 |
0.131 |
|
| score:p7_ctry1 |
0.08 |
0.03 |
2.43 |
0.015 |
* |
| score:p7_ctry2 |
0.07 |
0.03 |
2.45 |
0.014 |
* |
| score:p7_ctry3 |
-0.01 |
0.04 |
-0.19 |
0.849 |
|
| score:p7_ctry4 |
-0.01 |
0.04 |
-0.19 |
0.852 |
|
| predictorint_ctl:p7_ctry1 |
0.03 |
0.01 |
2.34 |
0.019 |
* |
| predictorabs_pmm:p7_ctry1 |
-0.06 |
0.03 |
-2.13 |
0.033 |
* |
| predictorpor_mm:p7_ctry1 |
0.00 |
0.05 |
0.02 |
0.982 |
|
| predictorhthk_wob:p7_ctry1 |
0.03 |
0.05 |
0.48 |
0.633 |
|
| predictorint_ctl:p7_ctry2 |
-0.03 |
0.01 |
-2.47 |
0.014 |
* |
| predictorabs_pmm:p7_ctry2 |
0.13 |
0.02 |
5.59 |
<0.001 |
* |
| predictorpor_mm:p7_ctry2 |
-0.02 |
0.04 |
-0.52 |
0.6 |
|
| predictorhthk_wob:p7_ctry2 |
-0.01 |
0.04 |
-0.31 |
0.754 |
|
| predictorint_ctl:p7_ctry3 |
0.00 |
0.02 |
0.28 |
0.781 |
|
| predictorabs_pmm:p7_ctry3 |
0.01 |
0.03 |
0.23 |
0.822 |
|
| predictorpor_mm:p7_ctry3 |
0.04 |
0.05 |
0.86 |
0.392 |
|
| predictorhthk_wob:p7_ctry3 |
0.02 |
0.07 |
0.23 |
0.819 |
|
| predictorint_ctl:p7_ctry4 |
0.02 |
0.01 |
1.63 |
0.104 |
|
| predictorabs_pmm:p7_ctry4 |
-0.13 |
0.03 |
-3.78 |
<0.001 |
* |
| predictorpor_mm:p7_ctry4 |
0.10 |
0.07 |
1.37 |
0.169 |
|
| predictorhthk_wob:p7_ctry4 |
-0.04 |
0.05 |
-0.72 |
0.469 |
|
| score:predictorint_ctl:p7_ctry1 |
-0.01 |
0.01 |
-0.67 |
0.505 |
|
| score:predictorabs_pmm:p7_ctry1 |
-0.05 |
0.03 |
-1.95 |
0.052 |
|
| score:predictorpor_mm:p7_ctry1 |
0.00 |
0.05 |
0.07 |
0.944 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.09 |
0.05 |
-1.87 |
0.061 |
|
| score:predictorint_ctl:p7_ctry2 |
0.00 |
0.01 |
0.22 |
0.825 |
|
| score:predictorabs_pmm:p7_ctry2 |
0.06 |
0.02 |
2.71 |
0.007 |
* |
| score:predictorpor_mm:p7_ctry2 |
0.01 |
0.04 |
0.13 |
0.893 |
|
| score:predictorhthk_wob:p7_ctry2 |
0.02 |
0.04 |
0.41 |
0.678 |
|
| score:predictorint_ctl:p7_ctry3 |
0.00 |
0.02 |
-0.11 |
0.915 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.24 |
0.214 |
|
| score:predictorpor_mm:p7_ctry3 |
-0.01 |
0.06 |
-0.17 |
0.869 |
|
| score:predictorhthk_wob:p7_ctry3 |
0.01 |
0.06 |
0.17 |
0.866 |
|
| score:predictorint_ctl:p7_ctry4 |
0.02 |
0.02 |
1.35 |
0.177 |
|
| score:predictorabs_pmm:p7_ctry4 |
-0.05 |
0.04 |
-1.35 |
0.178 |
|
| score:predictorpor_mm:p7_ctry4 |
-0.02 |
0.07 |
-0.25 |
0.803 |
|
| score:predictorhthk_wob:p7_ctry4 |
0.02 |
0.06 |
0.33 |
0.74 |
|
And here are our results using the Spiritual Events scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
-0.07 |
0.02 |
-3.59 |
<0.001 |
* |
| score |
0.21 |
0.02 |
10.32 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.01 |
-0.09 |
0.931 |
|
| predictorabs_pmm |
0.00 |
0.02 |
-0.12 |
0.906 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.10 |
0.921 |
|
| predictorhthk_wob |
-0.02 |
0.03 |
-0.69 |
0.489 |
|
| p7_ctry1 |
-0.17 |
0.04 |
-4.65 |
<0.001 |
* |
| p7_ctry2 |
0.57 |
0.03 |
20.27 |
<0.001 |
* |
| p7_ctry3 |
-0.22 |
0.04 |
-5.57 |
<0.001 |
* |
| p7_ctry4 |
-0.56 |
0.04 |
-13.82 |
<0.001 |
* |
| score:predictorint_ctl |
0.07 |
0.01 |
8.34 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.03 |
0.02 |
-1.84 |
0.066 |
|
| score:predictorpor_mm |
0.02 |
0.03 |
0.69 |
0.49 |
|
| score:predictorhthk_wob |
0.12 |
0.03 |
3.50 |
<0.001 |
* |
| score:p7_ctry1 |
0.07 |
0.03 |
2.13 |
0.033 |
* |
| score:p7_ctry2 |
0.13 |
0.03 |
4.54 |
<0.001 |
* |
| score:p7_ctry3 |
0.03 |
0.04 |
0.65 |
0.514 |
|
| score:p7_ctry4 |
-0.09 |
0.04 |
-2.06 |
0.039 |
* |
| predictorint_ctl:p7_ctry1 |
0.03 |
0.01 |
2.19 |
0.028 |
* |
| predictorabs_pmm:p7_ctry1 |
-0.09 |
0.03 |
-2.92 |
0.003 |
* |
| predictorpor_mm:p7_ctry1 |
-0.05 |
0.06 |
-0.80 |
0.421 |
|
| predictorhthk_wob:p7_ctry1 |
0.00 |
0.06 |
0.01 |
0.991 |
|
| predictorint_ctl:p7_ctry2 |
-0.04 |
0.01 |
-3.87 |
<0.001 |
* |
| predictorabs_pmm:p7_ctry2 |
0.18 |
0.02 |
7.30 |
<0.001 |
* |
| predictorpor_mm:p7_ctry2 |
0.01 |
0.05 |
0.27 |
0.79 |
|
| predictorhthk_wob:p7_ctry2 |
-0.04 |
0.04 |
-0.85 |
0.396 |
|
| predictorint_ctl:p7_ctry3 |
0.00 |
0.02 |
0.13 |
0.897 |
|
| predictorabs_pmm:p7_ctry3 |
-0.01 |
0.03 |
-0.17 |
0.867 |
|
| predictorpor_mm:p7_ctry3 |
0.03 |
0.06 |
0.52 |
0.606 |
|
| predictorhthk_wob:p7_ctry3 |
-0.02 |
0.08 |
-0.21 |
0.832 |
|
| predictorint_ctl:p7_ctry4 |
0.02 |
0.02 |
1.24 |
0.214 |
|
| predictorabs_pmm:p7_ctry4 |
-0.09 |
0.04 |
-2.53 |
0.012 |
* |
| predictorpor_mm:p7_ctry4 |
0.04 |
0.07 |
0.52 |
0.601 |
|
| predictorhthk_wob:p7_ctry4 |
-0.01 |
0.05 |
-0.10 |
0.92 |
|
| score:predictorint_ctl:p7_ctry1 |
0.02 |
0.01 |
1.28 |
0.201 |
|
| score:predictorabs_pmm:p7_ctry1 |
-0.05 |
0.03 |
-1.80 |
0.071 |
|
| score:predictorpor_mm:p7_ctry1 |
-0.03 |
0.06 |
-0.50 |
0.615 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.08 |
0.05 |
-1.60 |
0.109 |
|
| score:predictorint_ctl:p7_ctry2 |
0.08 |
0.01 |
7.08 |
<0.001 |
* |
| score:predictorabs_pmm:p7_ctry2 |
-0.02 |
0.02 |
-0.76 |
0.448 |
|
| score:predictorpor_mm:p7_ctry2 |
0.03 |
0.05 |
0.69 |
0.489 |
|
| score:predictorhthk_wob:p7_ctry2 |
0.19 |
0.05 |
3.98 |
<0.001 |
* |
| score:predictorint_ctl:p7_ctry3 |
-0.03 |
0.02 |
-1.71 |
0.088 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.04 |
1.18 |
0.238 |
|
| score:predictorpor_mm:p7_ctry3 |
0.01 |
0.06 |
0.17 |
0.865 |
|
| score:predictorhthk_wob:p7_ctry3 |
-0.11 |
0.07 |
-1.63 |
0.102 |
|
| score:predictorint_ctl:p7_ctry4 |
-0.01 |
0.02 |
-0.60 |
0.549 |
|
| score:predictorabs_pmm:p7_ctry4 |
-0.01 |
0.04 |
-0.30 |
0.767 |
|
| score:predictorpor_mm:p7_ctry4 |
-0.01 |
0.08 |
-0.09 |
0.925 |
|
| score:predictorhthk_wob:p7_ctry4 |
-0.03 |
0.06 |
-0.52 |
0.604 |
|
In both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors.


LS0tCnRpdGxlOiAiUGFja2V0IDcgKEtXIGZpcnN0IHBhc3MpIgpzdWJ0aXRsZTogIkxhc3QgdXBkYXRlZDogMjAxOS0wNC0xMyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKVGhpcyBpcyBLYXJhJ3MgZmlyc3QgcGFzcyBhdCBsb29raW5nIGF0IHRoZSBQYWNrZXQgNyBkYXRhICh3aXRoIGRhdGEgZnJvbSAyMDE5LTAzLTE4KS4gKE5vdGU6IFBERiBwcmludGVkIHBvcnRyYWl0LCA4MCUgem9vbSwgbWluaW11bSBtYXJnaW5zLikKCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsYW5nY29nKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShsdWJyaWRhdGUpCgp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpgYGB7cn0KZF9yYXcgPC0gcmVhZF94bHN4KCIuL2RhdGEgZnJvbSBOaWtraS9QYWNrZXQgN19DT0RFRF9NYXJjaCAxOCwgMjAxOS54bHN4IiwKICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkKYGBgCgpgYGB7cn0KdmFyX2tleSA8LSBkX3Jhd1sxLF0gJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInF1ZXN0aW9uIikgJT4lCiAgcmVuYW1lKHF1ZXN0aW9uX3RleHQgPSAiLiIpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDtCIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCLigJrDhMOuIiwgIiAtICIsIHF1ZXN0aW9uX3RleHQpLAogICAgICAgICBxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDuiIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCLigJrDhMO5IiwgIiciLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgbXV0YXRlKG9yZGVyID0gMTpucm93KC4pLAogICAgICAgICBzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBxdWVzdGlvbiksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gaWZlbHNlKHNjYWxlICVpbiUgYygiZW50ciIsICIyZGF5IiwgInZlciIsICJiYXRjIiwgInJlc2FtcGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHJ5IiwgInN1YmoiLCAiZmlsZSIsICJyZWNyIiwgIndoZXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aG9jIiksICJkYXRhX2VudHJ5Iiwgc2NhbGUpKSAlPiUKICBzZWxlY3Qob3JkZXIsIHNjYWxlLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCkgJT4lCiAgYXJyYW5nZShvcmRlcikKYGBgCgpgYGB7cn0KIyBjaGVjayBmb3IgZHVwbGljYXRlcwpkdXBsaWNhdGVzIDwtIGRfcmF3ICU+JQogIGNvdW50KHA3X2N0cnksIHA3X3N1YmopICU+JQogIGZpbHRlcihuID4gMSkKCmQwMCA8LSBmdWxsX2pvaW4oZF9yYXcgJT4lCiAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCFwN19zdWJqICVpbiUgZHVwbGljYXRlcyRwN19zdWJqKSksCiAgICAgICAgICAgICAgICAgZF9yYXcgJT4lIAogICAgICAgICAgICAgICAgICAgZmlsdGVyKHA3X3N1YmogJWluJSBkdXBsaWNhdGVzJHA3X3N1YmogJiBwN19iYXRjID09IDEpKQoKZDAwICU+JQogIGNvdW50KHA3X2N0cnksIHA3X3N1YmopICU+JQogIGZpbHRlcihuID4gMSkKCmQwMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7cn0KZDAgPC0gZDAwWy0xLF0gJT4lICMgZ2V0IHJpZCBvZiBxdWVzdGlvbiB0ZXh0CiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoInA3X2Fic18iKSwgc3RhcnRzX3dpdGgoInA3X2RzZV8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfc2VfIiksIHN0YXJ0c193aXRoKCJwN193b2JfIiksCiAgICAgICAgICAgICAgICAgc3RhcnRzX3dpdGgoInA3X3VuZXZfIiksIHN0YXJ0c193aXRoKCJwN19leHNlbl8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfaHRoa18iKSwgc3RhcnRzX3dpdGgoInA3X3Bvcl8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfbW1fIiksIHA3X2RlbV9hZ2UsIHA3X2RlbV9zZXMsCiAgICAgICAgICAgICAgICAgcDdfZGVtX2hvdy5zcHJ0LnJlbGcpLCAKICAgICAgICAgICAgZnVucyhhcy5udW1lcmljKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZGVtX2hvbHkudHVuZy5naWYpLAogICAgICAgICAgICBmdW5zKHJlY29kZV9mYWN0b3IoLiwgIjAiID0gIm5vIiwgIjEiID0gInllcyIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfYWJzX2NoZWNrLCBwN19kc2VfY2hlY2ssIHA3X3NlX2NoZWNrLCBwN191bmV2X2NoZWNrLCAKICAgICAgICAgICAgICAgICBwN19leHNlbl9jaGVjaywgcDdfcG9yX2NoZWNrLCBwN19tbV9jaGVjayksCiAgICAgICAgICAgIGZ1bnMocmVjb2RlX2ZhY3RvciguLCAiMCIgPSAicGFzcyIsICIxIiA9ICJmYWlsIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19hYnNfY2hpbGQuZXhwOnA3X2Fic19zdW5zZXQpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlKC4sICIwIiA9IEYsICIxIiA9IFQpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZHNlX2dvZC5wcmVzY246cDdfZHNlX2FjY2VwdC53cm9uZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmV2ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAib25jZSBpbiBhIHdoaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gInNvbWUgZGF5cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJtb3N0IGRheXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgPSAiZXZlcnkgZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIm1hbnkgdGltZXMgYSBkYXkiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3NlX3ZvaWNlLm91dDpwN19zZV9vd24uaGVhbGluZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmV2ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAib25jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJzZXZlcmFsIHRpbWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gImZhaXJseSBvZnRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICJ2ZXJ5IG9mdGVuIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN193b2Jfc2V0Lm1pbmRfcmV2ZXJzZTpwN193b2JfZnV0dXJlLm9uLm1lX3JldmVyc2UpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlX2ZhY3RvciguLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0zIiA9ICJzdHJvbmdseSBkaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMiIgPSAic29tZXdoYXQgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gImEgbGl0dGxlIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIm5laXRoZXIgYWdyZWUgbm9yIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gImEgbGl0dGxlIGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gInNvbWV3aGF0IGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gInN0cm9uZ2x5IGFncmVlIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN193b2JfbGl0dGxlLmNoYW5nZTpwN193b2JfcHVzaGVkLmFyb3VuZCksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAic3Ryb25nbHkgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAic29tZXdoYXQgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiYSBsaXR0bGUgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmVpdGhlciBhZ3JlZSBub3IgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gImEgbGl0dGxlIGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0yIiA9ICJzb21ld2hhdCBhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMyIgPSAic3Ryb25nbHkgYWdyZWUiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3VuZXZfdm9pY2UuYWxvdWQ6cDdfdW5ldl9zaGFkb3dzKSwKICAgICAgICAgICAgZnVucygiY2F0IiA9IHJlY29kZV9mYWN0b3IoLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJuZXZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJzb21ldGltZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAib2Z0ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiYWxtb3N0IGFsd2F5cyIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZXhzZW5fZXNwLmV4aXN0czpwN19leHNlbl9zZW5kLm1zZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAiaGFzIG5vdCBoYWQgdGhlIGV4cGVyaWVuY2UgKG5vKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJoYXMgaGFkIHRoZSBleHBlcmllbmNlICh5ZXMpIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19odGhrX2NvbXBsZXg6cDdfaHRoa19yZXNwb25zYmx0LCBwN19odGhrX2xvbmcuaHJzLAogICAgICAgICAgICAgICAgIHA3X2h0aGtfd2F5LnRvLnRvcDpwN19odGhrX25ldy5zb2x0aW9ucywKICAgICAgICAgICAgICAgICBwN19odGhrX3B1enpsZXM6cDdfaHRoa19pbnRlbC50YXNrLCBwN19odGhrX25vdC5wZXJzb25hbCksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTIiID0gImV4dHJlbWVseSBub3QgbGlrZSBtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMSIgPSAic29tZXdoYXQgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm90IHN1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAic29tZXdoYXQgbGlrZSBtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJleHRyZW1lbHkgbGlrZSBtZSIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfaHRoa19ub3QuZnVuOnA3X2h0aGtfYXZvaWQudGhpbmssIAogICAgICAgICAgICAgICAgIHA3X2h0aGtfaHJkLmhhdi50bzpwN19odGhrX2xpbC50aG91Z2h0LCBwN19odGhrX25vdC5leGNpdGluZywKICAgICAgICAgICAgICAgICBwN19odGhrX21lbnRhbC5lZmZydDpwN19odGhrX2pvYi5kb25lKSwKICAgICAgICAgICAgZnVucygiY2F0IiA9IHJlY29kZV9mYWN0b3IoLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJleHRyZW1lbHkgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAic29tZXdoYXQgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm90IHN1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gInNvbWV3aGF0IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTIiID0gImV4dHJlbWVseSBsaWtlIG1lIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19wb3JfdGhncy5ocnQsIHA3X3Bvcl93aWZpLnRoZ3M6cDdfcG9yX2FuZ3IuY250cmwsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3NwcnQuZW52eTpwN19wb3JfcmVhZC50aGdzLCBwN19wb3Jfc3RyZS5zcG9pbCwKICAgICAgICAgICAgICAgICBwN19wb3JfY29uc2x0LnVuc2VlbjpwN19wb3Jfc3Brbi5jdXJzZSwKICAgICAgICAgICAgICAgICBwN19wb3JfY3Vyc2Uuc2ljazpwN19wb3JfZmFsbC5pbi5sb3YsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3RoZ3MuaGVhbDpwN19wb3JfdmlzdWFsaXphdGlvbiksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAiaXQgZG9lcyBub3QgaGFwcGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIml0IG1pZ2h0IGhhcHBlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJpdCBkZWZpbml0ZWx5IGhhcHBlbnMiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3Bvcl90aGdzLmh1cnRfYTpwN19wb3JfdGhncy5odXJ0X2MsCiAgICAgICAgICAgICAgICAgcDdfcG9yX2FuZ3IuY250cmxfYTpwN19wb3JfYW5nci5jbnRybF9jLAogICAgICAgICAgICAgICAgIHA3X3Bvcl9yZWFkLnRoZ3NfYTpwN19wb3JfcmVhZC50aGdzX2MsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3N0cmUuc3BvaWxfYTpwN19wb3Jfc3RyZS5zcG9pbF9jLAogICAgICAgICAgICAgICAgIHA3X3Bvcl9zcGtuLmN1cnNlX2E6cDdfcG9yX3Nwa24uY3Vyc2VfYywKICAgICAgICAgICAgICAgICBwN19wb3JfZmFsbC5pbi5sb3ZfYTpwN19wb3JfZmFsbC5pbi5sb3ZfYyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiYSBsaXR0bGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiYSBsb3QiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X21tX2FuZ19mZWVsLmh1cnQ6cDdfbW1fc3BydC50aGdzLmh1cnQpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlX2ZhY3RvciguLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIm5ldmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gInJhcmVseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJvZnRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJ2ZXJ5IG9mdGVuIikpKSAlPiUKICBtdXRhdGUocDdfY3RyeSA9IHJlY29kZV9mYWN0b3IocDdfY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIlVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gIkdoYW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIlRoYWlsYW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIkNoaW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIlZhbnVhdHUiKSwKICAgICAgICAgcDdfc3ViaiA9IGZhY3RvcihwN19zdWJqKSwKICAgICAgICAgcDdfZGVtX3NleCA9IHJlY29kZV9mYWN0b3IocDdfZGVtX3NleCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJtYWxlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJmZW1hbGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIm90aGVyIiksCiAgICAgICAgIHA3X2RlbV9ydXIudXJiID0gcmVjb2RlX2ZhY3RvcihwN19kZW1fcnVyLnVyYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJydXJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAidXJiYW4iKSwKICAgICAgICAgcDdfZGVtX2FmZnJkLmJhc2ljcyA9IHJlY29kZV9mYWN0b3IocDdfZGVtX2FmZnJkLmJhc2ljcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIm5vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gInllcyIpLAogICAgICAgICBwN19kZW1fc2VzX2NhdCA9IHJlY29kZV9mYWN0b3IocDdfZGVtX3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMiIgPSAibXVjaCBwb29yZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0xIiA9ICJhIGxpdHRsZSBwb29yZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gImFib3V0IHRoZSBzYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJhIGxpdHRsZSByaWNoZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIm11Y2ggcmljaGVyIikpICU+JQogIHNlbGVjdCgtYyhwN19lbnRyOnA3X3Jlc2FtcGxlLCBwN19maWxlOnA3X3dob2MpKSAlPiUKICBkaXN0aW5jdCgpCmBgYAoKYGBge3J9CiMgY291bnQgYW55b25lIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVja3MKIyBleGNsdWRlIGFueW9uZSB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2tzCiMgZF9mYWlsIDwtIGQwICU+JQojICAgZmlsdGVyKHA3X2Fic19jaGVjayA9PSAiZmFpbCIgfCBwN19kc2VfY2hlY2sgPT0gImZhaWwiIHwgCiMgICAgICAgICAgICBwN19zZV9jaGVjayA9PSAiZmFpbCIgfCBwN191bmV2X2NoZWNrID09ICJmYWlsIiB8IAojICAgICAgICAgICAgcDdfZXhzZW5fY2hlY2sgPT0gImZhaWwiIHwgcDdfcG9yX2NoZWNrID09ICJmYWlsIiB8CiMgICAgICAgICAgICBwN19tbV9jaGVjayA9PSAiZmFpbCIpCiMgZF9mYWlsICU+JSBjb3VudChwN19jdHJ5KQoKZDAgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiY2hlY2siKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBhdHRlbnRpb25fY2hlY2ssIGNvbnRhaW5zKCJjaGVjayIpKSAlPiUKICBjb3VudChwN19jdHJ5LCBzY2FsZSwgYXR0ZW50aW9uX2NoZWNrKSAlPiUKICBzcHJlYWQoYXR0ZW50aW9uX2NoZWNrLCBuKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKQoKIyBleGNsdWRlIGFueW9uZSB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2tzCmQgPC0gZDAgJT4lCiAgZmlsdGVyKHA3X2Fic19jaGVjayAhPSAiZmFpbCIsIHA3X2RzZV9jaGVjayAhPSAiZmFpbCIsIHA3X3NlX2NoZWNrICE9ICJmYWlsIiwKICAgICAgICAgcDdfdW5ldl9jaGVjayAhPSAiZmFpbCIsIHA3X2V4c2VuX2NoZWNrICE9ICJmYWlsIiwKICAgICAgICAgcDdfcG9yX2NoZWNrICE9ICJmYWlsIiwgcDdfbW1fY2hlY2sgIT0gImZhaWwiKQpgYGAKCmBgYHtyfQojICMgY2hlY2sgY291bnRyeSBjb2RlcwojIGQgJT4lIAojICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiMgICBtdXRhdGUocDdfc3Vial9maXJzdGRpZyA9IHN1YnN0cihwN19zdWJqLCAxLCAxKSkgJT4lCiMgICBjb3VudChwN19jdHJ5LCBwN19zdWJqX2ZpcnN0ZGlnKQpgYGAKCgojIENvbmZpcm1hdG9yeSBoeXBvdGhlc2VzIChhcyBzcGVjaWZpZWQgaW4gcHJlcmVnaXN0cmF0aW9uKQoKX05vdGU6IEkgaW5jbHVkZWQgYWxsIHBhcnRpY2lwYW50cywgZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzLCBzaW5jZSB3ZSBkaWQgbm90IHNwZWNpZnkgdGhhdCB3ZSB3b3VsZCBleGNsdWRlIHBhcnRpY2lwYW50cyBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLiBBdCBzb21lIHBvaW50IHdlIHNob3VsZCB0cnkgcnVubmluZyBldmVyeXRoaW5nIG9uIHRoZSBzdWJzZXQgb2YgcGFydGljaXBhbnRzIHdobyBwYXNzZWQgYWxsIGF0dGVudGlvbiBjaGVja3MganVzdCBzbyB0aGF0IHdlIGtub3csIGJ1dCB0aGlzIGRlY3JlYXNlcyBvdXIgc2FtcGxlIHNpemVzIHByZXR0eSBkcmFtYXRpY2FsbHkuXwoKYGBge3J9CiMgc3RhbmRhcmRpemUsIGNvbGxhcHNpbmcgYWNyb3NzIHBhcnRpY2lwYW50cwpkX3N0ZCA8LSBkMCAlPiUgIyBpbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIG11dGF0ZShzY29yZV9zdGQgPSBzY2FsZShzY29yZSwgc2NhbGUgPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtc2NvcmUpICU+JQogIHNwcmVhZChzY2FsZSwgc2NvcmVfc3RkKQpgYGAKCmBgYHtyfQojIHN0YW5kYXJkaXplLCBjb2xsYXBzaW5nIGFjcm9zcyBwYXJ0aWNpcGFudHMKZF9zdGRfYnlzaXRlIDwtIGQwICU+JSAjIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lICMgZ3JvdXAgYnkgc2l0ZQogIG11dGF0ZShzY29yZV9zdGQgPSBzY2FsZShzY29yZSwgc2NhbGUgPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtc2NvcmUpICU+JQogIHNwcmVhZChzY2FsZSwgc2NvcmVfc3RkKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEh5cG90aGVzaXMgIzEKCl9fSHlwb3RoZXNpcyAjMTogUGVvcGxlIHdobyBzY29yZSBoaWdoZXIgb24gdGhlIFRlbGxlZ2VuIEFic29ycHRpb24gU2NhbGUgKFRlbGxlZ2VuICYgQXRraW5zb24sIDE5NzQpIGFsc28gcmVwb3J0IG1vcmUgc3Bpcml0dWFsIGV4cGVyaWVuY2VzLl9fCgpQcmVyZWdpc3RlcmVkIGFuYWx5c2lzOiAiV2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlLCBjb2xsYXBzaW5nIGFjcm9zcyBmaWVsZCBzaXRlcywgYW5kIHRoZW4gY29uZHVjdCBhIG1peGVkLWVmZmVjdHMgbGluZWFyIHJlZ3Jlc3Npb24sIHVzaW5nIGFic29ycHRpb24gc2NvcmVzIHRvIHByZWRpY3QgcmVwb3J0cyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMsIGFsbG93aW5nIGZvciBkaWZmZXJlbmNlcyBhY3Jvc3Mgb3VyIGZpdmUgZmllbGQgc2l0ZXMgYW5kIGFjcm9zcyB0aGUgdHdvIHNjYWxlcyB3ZSB1c2VkIHRvIG1lYXN1cmUgc3Bpcml0dWFsIGV4cGVyaWVuY2UuIFVzaW5nIHRoZSDigJxsbWU04oCdIHBhY2thZ2UgZm9yIFIgKEJhdGVzLCAyMDE4KSwgd2Ugd2lsbCBzcGVjaWZ5IHRoaXMgbW9kZWwgYXMgZm9sbG93czogZXhwZXJpZW5jZSB+IGFic29ycHRpb24gKiBzaXRlICogc2NhbGUgKyAoMSB8IHN1YmplY3QpLCB3aGVyZSDigJxzY2FsZeKAnSBpcyBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlIGNvbXBhcmluZyB0aGUgdHdvIHNwaXJpdHVhbCBleHBlcmllbmNlIHNjYWxlcyAoZWZmZWN0LWNvZGVkKSwgYW5kIOKAnHNpdGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIGZpdmUgZmllbGQgc2l0ZXMgKGVmZmVjdC1jb2RlZCkuIE91ciBwcmVkaWN0aW9uIGlzIHRoYXQgdGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gb24gZXhwZXJpZW5jZSB3aWxsIGJlIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKGIgPiAwLCB0ID4gMiwgcCA8IDAuMDUgdXNpbmcgU2F0dGVydGh3YWl0ZSdzIGRlZ3JlZXMgb2YgZnJlZWRvbSBtZXRob2QgYXMgaW1wbGVtZW50ZWQgaW4gdGhlIOKAnGxtZXJUZXN04oCdIHBhY2thZ2UgZm9yIFIsIEt1em5ldHNvdmEsIEJyb2NraG9mZiwgJiBDaHJpc3RlbnNlbiwgMjAxNykuIChUaGUgcmVzdCBvZiB0aGUgcGFyYW1ldGVycyBpbmNsdWRlZCBpbiB0aGUgbW9kZWwgd2lsbCBiZSBvZiBncmVhdCBpbnRlcmVzdCB0byB1cywgYnV0IGFyZSBleHBsb3JhdG9yeS4pCgpJZiB3ZSBoYXZlIHRyb3VibGUgZml0dGluZyB0aGVzZSBtb2RlbHMgb3IgdGhlcmUgYXJlIG90aGVyIHNpZ25zIG9mIG1vZGVsIGZpdCBwcm9ibGVtcywgd2Ugd2lsbCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlIG1vZGVsOiBleHBlcmllbmNlIH4gYWJzb3JwdGlvbiAqIHNjYWxlICsgKDEgfCBzaXRlL3N1YmplY3QpLiIKCkhlcmUgYXJlIG91ciByZXN1bHRzOgoKYGBge3J9CmRfc3RkX2gxIDwtIGRfc3RkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UsIGFicykgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2gxJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2gxJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyMSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwN19jdHJ5ICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCBkX3N0ZF9oMSkKIyBzdW1tYXJ5KHIxKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyMSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpoMV9zdW0gPC0gZDAgJT4lIAogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCwgcDdfZHNlX3RvdGFsLCBwN19zZV90b3RhbCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHNjYWxlKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oc2NvcmUpLAogICAgICAgICAgICBzdGRldiA9IHNkKHNjb3JlKSkgJT4lCiAgdW5ncm91cCgpCmgxX3N1bQpgYGAKCioqV2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjMSoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBtYWluIGVmZmVjdCBvZiBhYnNvcnB0aW9uIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChzZWUgYm9sZGVkIHJvdyBpbiB0YWJsZSBhYm92ZSkuIAoKRm9yIGV2ZXJ5IGluY3JlYXNlIG9mIDEgc3RhbmRhcmQgZGV2aWF0aW9uIGluIGFic29ycHRpb24sIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjEpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNwaXJpdHVhbCBleHBlcmllbmNlcy4gSW4gY29uY3JldGUgdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgaW5jcmVhc2Ugb2YgYHIgaDFfc3VtJHN0ZGV2W2gxX3N1bSRzY2FsZSA9PSAiYWJzIl0gJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEFic29ycHRpb24gc2NhbGUgKHJhbmdlOiAwLTM0KSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgKHN1bW1hcnkocjEpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gKiBoMV9zdW0kc3RkZXZbaDFfc3VtJHNjYWxlID09ICJkc2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZSAocmFuZ2U6IDAtNzApIG9yIGByIChzdW1tYXJ5KHIxKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICogaDFfc3VtJHN0ZGV2W2gxX3N1bSRzY2FsZSA9PSAic2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTgwKS4KCmBgYHtyfQpoMV9wbG90X2EgPC0gZF9zdGRfaDEgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzE6IEJ5IHNpdGUgYW5kIHNjYWxlIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDFfcGxvdF9iIDwtIGRfc3RkX2gxICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IGFicywgeSA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzE6IE92ZXJhbGwiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGgxX3Bsb3RfYSwgaDFfcGxvdF9iLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEh5cG90aGVzaXMgIzIKCl9fSHlwb3RoZXNpcyAjMjogUGVvcGxlIHdobyBzY29yZSBoaWdoZXIgb24gb3VyIHR3byBwb3Jvc2l0eSBpbmRpY2VzIGFsc28gcmVwb3J0IG1vcmUgc3Bpcml0dWFsIGV4cGVyaWVuY2VzLl9fCgpQcmVyZWdpc3RlcmVkIGFuYWx5c2lzOiAiV2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlLCBjb2xsYXBzaW5nIGFjcm9zcyBmaWVsZCBzaXRlcywgYW5kIHRoZW4gY29uZHVjdCBhIG1peGVkLWVmZmVjdHMgbGluZWFyIHJlZ3Jlc3Npb24sIHVzaW5nIHBvcm9zaXR5IHNjb3JlcyAoZnJvbSBlYWNoIG9mIG91ciB0d28gaW5kaWNlcykgdG8gcHJlZGljdCByZXBvcnRzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlcyBhY3Jvc3MgdGhlIDIgc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzIGluY2x1ZGVkIGluIG91ciBzdXJ2ZXkgcGFja2V0LCBhbGxvd2luZyBmb3IgZGlmZmVyZW5jZXMgYWNyb3NzIG91ciBmaXZlIGZpZWxkIHNpdGVzIGFuZCBhY3Jvc3MgdGhlIHR3byBzY2FsZXMgd2UgdXNlZCB0byBtZWFzdXJlIHNwaXJpdHVhbCBleHBlcmllbmNlLiBVc2luZyB0aGUg4oCcbG1lNOKAnSBwYWNrYWdlIGZvciBSIChCYXRlcywgMjAxOCksIHdlIHdpbGwgc3BlY2lmeSB0aGlzIG1vZGVsIGFzIGZvbGxvd3M6IGV4cGVyaWVuY2UgfiBwb3Jvc2l0eSAqIHNpdGUgKiBzY2FsZSArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNjYWxl4oCdIGlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgY29tcGFyaW5nIHRoZSB0d28gc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzIChlZmZlY3QtY29kZWQpLCBhbmQg4oCcc2l0ZeKAnSBpcyBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlIGNvbXBhcmluZyB0aGUgZml2ZSBmaWVsZCBzaXRlcyAoZWZmZWN0LWNvZGVkKS4gV2Ugd2lsbCBydW4gdHdvIHZlcnNpb25zIG9mIHRoaXMgbW9kZWwsIG9uZSB1c2luZyBlYWNoIG9mIHRoZSB0d28g4oCccG9yb3NpdHnigJ0gbWVhc3VyZXMgZGVzY3JpYmVkIGFib3ZlLiBGb3IgZWFjaCByZWdyZXNzaW9uLCBvdXIgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSBtYWluIGVmZmVjdCBvZiBwb3Jvc2l0eSBvbiBleHBlcmllbmNlIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSB1c2luZyBTYXR0ZXJ0aHdhaXRlJ3MgZGVncmVlcyBvZiBmcmVlZG9tIG1ldGhvZCBhcyBpbXBsZW1lbnRlZCBpbiB0aGUg4oCcbG1lclRlc3TigJ0gcGFja2FnZSBmb3IgUiwgS3V6bmV0c292YSwgQnJvY2tob2ZmLCAmIENocmlzdGVuc2VuLCAyMDE3KS4gKFRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzIGluY2x1ZGVkIGluIHRoZSBtb2RlbCB3aWxsIGJlIG9mIGdyZWF0IGludGVyZXN0IHRvIHVzLCBidXQgYXJlIGV4cGxvcmF0b3J5LikKCklmIHdlIGhhdmUgdHJvdWJsZSBmaXR0aW5nIHRoZXNlIG1vZGVscyBvciB0aGVyZSBhcmUgb3RoZXIgc2lnbnMgb2YgbW9kZWwgZml0IHByb2JsZW1zLCB3ZSB3aWxsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmUgbW9kZWw6IGV4cGVyaWVuY2UgfiBwb3Jvc2l0eSAqIHNjYWxlICsgKDEgfCBzaXRlL3N1YmplY3QpLiIKCkhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgUG9yb3NpdHkgc2NhbGUgKER1bGluKToKCmBgYHtyfQpkX3N0ZF9oMiA8LSBkX3N0ZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfaDIkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDIkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIyX3BvciA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBwN19jdHJ5ICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCBkX3N0ZF9oMikKIyBzdW1tYXJ5KHIyX3BvcikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjJfcG9yKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGU6CgpgYGB7cn0KcjJfbW0gPC0gbG1lcihleHBlcmllbmNlIH4gbW0gKiBwN19jdHJ5ICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCBkX3N0ZF9oMikKIyBzdW1tYXJ5KHIyX21tKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyMl9tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpoMl9zdW0gPC0gZDAgJT4lIAogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3Bvcl90b3RhbCwgcDdfbW1fdG90YWwsCiAgICAgICAgICAgcDdfZHNlX3RvdGFsLCBwN19zZV90b3RhbCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHNjYWxlKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oc2NvcmUpLAogICAgICAgICAgICBzdGRldiA9IHNkKHNjb3JlKSkgJT4lCiAgdW5ncm91cCgpCmgyX3N1bQpgYGAKCkluIGJvdGggY2FzZXMsICoqd2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjMioqOiBBcyBwcmVkaWN0ZWQsIHRoZSBtYWluIGVmZmVjdCBvZiBwb3Jvc2l0eSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBib3RoIHJlZ3Jlc3Npb24gYW5hbHlzZXMgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZXMgYWJvdmUpLiAKCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBwb3Jvc2l0eSBhcyBpbmRleGVkIGJ5IHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciBzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHN0YW5kYXJkIGRldmlhdGlvbnMgaW4gdGhlaXIgc3Bpcml0dWFsIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMl9zdW0kc3RkZXZbaDJfc3VtJHNjYWxlID09ICJwb3IiXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgUG9yb3NpdHkgc2NhbGUgKHJhbmdlOiAwLTM0KSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgKHN1bW1hcnkocjJfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAiZHNlIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGUgKHJhbmdlOiAwLTcwKSBvciBgciAoc3VtbWFyeShyMl9wb3IpJGNvZWZmaWNpZW50c1sicG9yIiwgIkVzdGltYXRlIl0gKiBoMl9zdW0kc3RkZXZbaDJfc3VtJHNjYWxlID09ICJzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZSAocmFuZ2U6IDAtODApLiAKCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBwb3Jvc2l0eSBhcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGUsIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjJfbW0pJGNvZWZmaWNpZW50c1sibW0iLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHN0YW5kYXJkIGRldmlhdGlvbnMgaW4gdGhlaXIgc3Bpcml0dWFsIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMl9zdW0kc3RkZXZbaDJfc3VtJHNjYWxlID09ICJtbSJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGUgKHJhbmdlOiAwLTU0KSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgKHN1bW1hcnkocjJfbW0pJGNvZWZmaWNpZW50c1sibW0iLCAiRXN0aW1hdGUiXSAqIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gImRzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlIChyYW5nZTogMC03MCkgb3IgYHIgKHN1bW1hcnkocjJfbW0pJGNvZWZmaWNpZW50c1sibW0iLCAiRXN0aW1hdGUiXSAqIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gInNlIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBTcGlyaXR1YWwgRXZlbnRzIHNjYWxlIChyYW5nZTogMC04MCkuCgpgYGB7cn0KaDJfcGxvdF9hMSA8LSBkX3N0ZF9oMiAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwb3IsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMjogQnkgc2l0ZSBhbmQgc2NhbGUgKHVzaW5nIER1bGluIFBvcm9zaXR5IHNjYWxlKSIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoMl9wbG90X2IxIDwtIGRfc3RkX2gyICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzI6IE92ZXJhbGwiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2ExLCBoMl9wbG90X2IxLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgpgYGB7cn0KaDJfcGxvdF9hMiA8LSBkX3N0ZF9oMiAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMyOiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDJfcGxvdF9iMiA8LSBkX3N0ZF9oMiAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbSwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzI6IE92ZXJhbGwiLAogICAgICAgeCA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDJfcGxvdF9hMiwgaDJfcGxvdF9iMiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBIeXBvdGhlc2lzICMzCgpfX0h5cG90aGVzaXMgIzM6IFRoZSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBleHBlcmllbmNlIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgaW4gZWFjaCBmaWVsZCBzaXRlIGluZGl2aWR1YWxseS5fXwoKUHJlcmVnaXN0ZXJlZCBhbmFseXNpczogIkZvciBlYWNoIG9mIG91ciBmaXZlIGZpZWxkIHNpdGVzLCB3ZSB3aWxsIHN0YW5kYXJkaXplIHNjb3JlcyBvbiBlYWNoIG1lYXN1cmUgKGNvbnNpZGVyaW5nIG9ubHkgcGFydGljaXBhbnRzIGZyb20gdGhhdCBmaWVsZCBzaXRlKSwgYW5kIHRoZW4gY29uZHVjdCB0aGUgc2FtZSBhbmFseXNlcyBzcGVjaWZpZWQgYWJvdmUgZm9yIFtIeXBvdGhlc2lzICMxXSB0byBhc3Nlc3MgdGhlIHJlbGF0aW9uc2hpcFtdIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UgWy4uLl0gaW4gZWFjaCBmaWVsZCBzaXRlIGluZGl2aWR1YWxseS4gRm9yIEh5cG90aGVzaXMgIzMsIG91ciBtb2RlbHMgd2lsbCB0YWtlIHRoZSBmb2xsb3dpbmcgZm9ybTogZXhwZXJpZW5jZSB+IGFic29ycHRpb24gKiBzY2FsZSArICgxIHwgc3ViamVjdCkuIFsuLi5dIEFnYWluLCBvdXIgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSBtYWluIGVmZmVjdCBvZiBhYnNvcnB0aW9uIG9uIGV4cGVyaWVuY2UgYW5kIG9mIGVhY2ggcG9yb3NpdHkgbWVhc3VyZSBvbiBleHBlcmllbmNlIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHAgPCAwLjA1KS4iCgpIZXJlIGFyZSBvdXIgcmVzdWx0czoKCmBgYHtyfQpkX3N0ZF9ieXNpdGVfaDEgPC0gZF9zdGRfYnlzaXRlICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UsIGFicykgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oMSRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9ieXNpdGVfaDEkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIzX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHIzX3VzKQpgYGAKCmBgYHtyfQpyM19naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyM19naCkKYGBgCgpgYGB7cn0KcjNfdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjNfdGgpCmBgYAoKYGBge3J9CnIzX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHIzX2NoKQpgYGAKCmBgYHtyfQpyM192dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHIzX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyM191cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjNfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHIzX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyM19jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjNfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDQpICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgNSwgOCkgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCA5LCAxMikgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAxMywgMTYpICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCAxNywgMjApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDE4LCA0KSksIGJvbGQgPSBUKQpgYGAKCioqV2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjMyBpbiBhbGwgc2l0ZXMgX2V4Y2VwdF8gVmFudWF0dSoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBtYWluIGVmZmVjdCBvZiBhYnNvcnB0aW9uIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIHRoZSBVUywgR2hhbmEsIFRoYWlsYW5kLCBhbmQgQ2hpbmHigJRidXQgdGhpcyB3YXMgbm90IHRoZSBjYXNlIGluIFZhbnVhdHUgKGFsdGhvdWdoIHNvbWUgd291bGQgY29uc2lkZXIgdGhlIGVmZmVjdCAibWFyZ2luYWxseSBzaWduaWZpY2FudCI7IHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CmdncGxvdChkX3N0ZF9ieXNpdGVfaDEgJT4lCiAgICAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSksIAogICAgICAgYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArIAogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArIAogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzMiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJIeXBvdGhlc2lzICMxLCIgYWJvdmUuKQoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgSHlwb3RoZXNpcyAjNAoKX19IeXBvdGhlc2lzICM0OiBUaGUgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgZXhwZXJpZW5jZSBpcyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGluIGVhY2ggZmllbGQgc2l0ZSBpbmRpdmlkdWFsbHkuX18KClByZXJlZ2lzdGVyZWQgYW5hbHlzaXM6ICJGb3IgZWFjaCBvZiBvdXIgZml2ZSBmaWVsZCBzaXRlcywgd2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlIChjb25zaWRlcmluZyBvbmx5IHBhcnRpY2lwYW50cyBmcm9tIHRoYXQgZmllbGQgc2l0ZSksIGFuZCB0aGVuIGNvbmR1Y3QgdGhlIHNhbWUgYW5hbHlzZXMgc3BlY2lmaWVkIGFib3ZlIGZvciBbSHlwb3RoZXNpcyAjMl0gdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXBbLi4uXSBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBleHBlcmllbmNlIGluIGVhY2ggZmllbGQgc2l0ZSBpbmRpdmlkdWFsbHkuIFsuLi5dIEZvciBIeXBvdGhlc2lzICM0LCBvdXIgbW9kZWxzIHdpbGwgdGFrZSB0aGUgZm9sbG93aW5nIGZvcm06IGV4cGVyaWVuY2UgfiBwb3Jvc2l0eSAqIHNjYWxlICsgKDEgfCBzdWJqZWN0KS4gWy4uLl0gQWdhaW4sIG91ciBwcmVkaWN0aW9uIGlzIHRoYXQgdGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gb24gZXhwZXJpZW5jZSBhbmQgb2YgZWFjaCBwb3Jvc2l0eSBtZWFzdXJlIG9uIGV4cGVyaWVuY2Ugd2lsbCBiZSBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChiID4gMCwgcCA8IDAuMDUpLiIKCkhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgUG9yb3NpdHkgc2NhbGUgKER1bGluKToKCmBgYHtyfQpkX3N0ZF9ieXNpdGVfaDQgPC0gZF9zdGRfYnlzaXRlICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UsIHBvciwgbW0pICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9ieXNpdGVfaDQkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2g0JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyNF9wb3JfdXMgPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjRfcG9yX3VzKQpgYGAKCmBgYHtyfQpyNF9wb3JfZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjRfcG9yX2doKQpgYGAKCmBgYHtyfQpyNF9wb3JfdGggPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjRfcG9yX3RoKQpgYGAKCmBgYHtyfQpyNF9wb3JfY2ggPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjRfcG9yX2NoKQpgYGAKCmBgYHtyfQpyNF9wb3JfdnQgPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNF9wb3JfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI0X3Bvcl91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjRfcG9yX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNF9wb3JfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI0X3Bvcl9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjRfcG9yX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpVc2luZyB0aGUgUG9yb3NpdHkgc2NhbGUsICoqV2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjNCBpbiBhbGwgc2l0ZXMqKjogQXMgcHJlZGljdGVkLCB0aGUgbWFpbiBlZmZlY3Qgb2YgcG9yb3NpdHkgd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgaW4gdGhlIFVTLCBHaGFuYSwgVGhhaWxhbmQsIENoaW5hLCBhbmQgVmFudWF0dSAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlIGFib3ZlKS4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX2g0ICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM0ICh1c2luZyBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGU6CgpgYGB7cn0KcjRfbW1fdXMgPC0gbG1lcihleHBlcmllbmNlIH4gbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyNF9tbV91cykKYGBgCgpgYGB7cn0KcjRfbW1fZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyNF9tbV9naCkKYGBgCgpgYGB7cn0KcjRfbW1fdGggPC0gbG1lcihleHBlcmllbmNlIH4gbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNF9tbV90aCkKYGBgCgpgYGB7cn0KcjRfbW1fY2ggPC0gbG1lcihleHBlcmllbmNlIH4gbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyNF9tbV9jaCkKYGBgCgpgYGB7cn0KcjRfbW1fdnQgPC0gbG1lcihleHBlcmllbmNlIH4gbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI0X21tX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9tbV91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjRfbW1fZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI0X21tX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9tbV9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjRfbW1fdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDQpICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgNSwgOCkgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCA5LCAxMikgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAxMywgMTYpICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCAxNywgMjApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDE4LCA0KSksIGJvbGQgPSBUKQpgYGAKClVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGUsICoqV2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjNCBpbiBhbGwgc2l0ZXMgX2V4Y2VwdF8gVmFudWF0dSoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBtYWluIGVmZmVjdCBvZiBNYXJ0aGEgU3Rvcnkgd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgaW4gdGhlIFVTLCBHaGFuYSwgVGhhaWxhbmQsIGFuZCBDaGluYeKAlGJ1dCB0aGlzIHdhcyBub3QgdGhlIGNhc2UgaW4gVmFudWF0dSAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlIGFib3ZlKS4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX2g0ICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzQgKHVzaW5nIE1hcnRoYSBTdG9yeSBzY2FsZSkiLAogICAgICAgeCA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCihTZWUgb3RoZXIgcmVsZXZhbnQgcGxvdHMgdW5kZXIgIkh5cG90aGVzaXMgIzIsIiBhYm92ZS4pCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIFNlY29uZGFyeSBleHBsb3JhdG9yeSBhbmFseXNlcwoKIyMgIlNlY3VsYXIiIGV4cGVyaWVuY2VzCgpGcm9tIHByZXJlZ2lzdHJhdGlvbjogIkZpcnN0LCBpbiBvcmRlciB0byBleHBsb3JlIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIGFmZmlybWF0aW9uIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlLCBwb3Jvc2l0eSBhbmQgYWJzb3JwdGlvbiBhcmUgc2ltcGx5IGR1ZSB0byB0aGUgcmVsaWdpb3NpdHkgb2YgcGFydGljaXBhbnRzLCB3ZSB3aWxsIGNvbmR1Y3QgYWRkaXRpb25hbCBhbmFseXNlcyBmb2N1c2luZyBvbiB0aGUgdHdvIOKAnHNlY3VsYXLigJ0gZXhwZXJpZW5jZSBzY2FsZXMgKHRoZSByZXZpc2VkIExhdW5heSBTbGFkZSBzY2FsZSwgTW9ycmlzb24sIFdlbGxzIGFuZCBOb3RoYXJkIDIwMDBdOyBhbmQgdGhlIFNoZWVwLUdvYXQgW3BhcmFub3JtYWxdIHNjYWxlLCBUaGFsYm9ybmUgJiBEZWxpbiwgMTk5MykuIFRoZXNlIGFuYWx5c2VzIHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoZSBwcmltYXJ5IGFuYWx5c2VzIG91dGxpbmVkIGFib3ZlLCBleGNlcHQgdGhhdCB0aGV5IHdpbGwgb25seSBpbmNsdWRlIHRoZXNlIHR3byDigJxzZWN1bGFyIGV4cGVyaWVuY2XigJ0gc2NhbGVzIGFuZCBub3QgdGhlIHR3byBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMuIFdlIGNvbnNpZGVyIHRoZXNlIHRvIGJlIGV4cGxvcmF0b3J5IGFuYWx5c2VzLiIKCiMjIyBQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxCgpgYGB7cn0KZF9zdGRfaDFfc2VjIDwtIGRfc3RkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHVuZXYsIGV4c2VuLCBhYnMpICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyh1bmV2LCBleHNlbikpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfaDFfc2VjJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2gxX3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjFfc2VjIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICBkX3N0ZF9oMV9zZWMpCiMgc3VtbWFyeShyMV9zZWMpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIxX3NlYykkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpoMV9zZWNfc3VtIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19hYnNfdG90YWwsIHA3X3VuZXZfdG90YWwsIHA3X2V4c2VuX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDFfc2VjX3N1bQpgYGAKCkluIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzEsICoqdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic29ycHRpb24gYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBhbHNvIHNpZ25pZmljYW50bHkgcG9zaXRpdmUqKiAoc2VlIGJvbGRlZCByb3cgdGFibGUgYWJvdmUpLgoKRm9yIGV2ZXJ5IGluY3JlYXNlIG9mIDEgc3RhbmRhcmQgZGV2aWF0aW9uIGluIGFic29ycHRpb24sIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjFfc2VjKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzZWN1bGFyIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMV9zZWNfc3VtJHN0ZGV2W2gxX3NlY19zdW0kc2NhbGUgPT0gImFicyJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBBYnNvcnB0aW9uIHNjYWxlIChyYW5nZTogMC0zNCksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIxX3NlYykkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAqIGgxX3NlY19zdW0kc3RkZXZbaDFfc2VjX3N1bSRzY2FsZSA9PSAidW5ldiJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgVW5jb21tb24gRXZlbnRzIHNjYWxlIChyYW5nZTogMC0xOCkgb3IgYHIgKHN1bW1hcnkocjFfc2VjKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICogaDFfc2VjX3N1bSRzdGRldltoMV9zZWNfc3VtJHNjYWxlID09ICJleHNlbiJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRXh0cmFzZW5zb3J5IHNjYWxlIChyYW5nZTogMC03KS4KClRoaXMgd2FzIGFjdHVhbGx5IGEgKG51bWVyaWNhbGx5KSBfc3Ryb25nZXJfIGVmZmVjdCB0aGFuIHdoYXQgd2UgZG9jdW1lbnRlZCBmb3Igc3Bpcml0dWFsIGV4cGVyaWVuY2VzIChiID0gYHIgc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCB2cy4gYiA9IGByIHN1bW1hcnkocjEpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3J9CmgxX3NlY19wbG90X2EgPC0gZF9zdGRfaDFfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IGFicywgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzE6IEJ5IHNpdGUgYW5kIHNjYWxlIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgxX3NlY19wbG90X2IgPC0gZF9zdGRfaDFfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IGFicywgeSA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMTogT3ZlcmFsbCIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGgxX3NlY19wbG90X2EsIGgxX3NlY19wbG90X2IsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMjIFBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzIKCkhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgUG9yb3NpdHkgc2NhbGUgKER1bGluKToKCmBgYHtyfQpkX3N0ZF9oMl9zZWMgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgdW5ldiwgZXhzZW4sIHBvciwgbW0pICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyh1bmV2LCBleHNlbikpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfaDJfc2VjJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2gyX3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjJfc2VjX3BvciA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBwN19jdHJ5ICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgIGRfc3RkX2gyX3NlYykKIyBzdW1tYXJ5KHIyX3NlY19wb3IpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIyX3NlY19wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZToKCmBgYHtyfQpyMl9zZWNfbW0gPC0gbG1lcihleHBlcmllbmNlIH4gbW0gKiBwN19jdHJ5ICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgZF9zdGRfaDJfc2VjKQojIHN1bW1hcnkocjJfc2VjX21tKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyMl9zZWNfbW0pJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgpgYGB7cn0KaDJfc2VjX3N1bSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfcG9yX3RvdGFsLCBwN19tbV90b3RhbCwKICAgICAgICAgICBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHNjYWxlKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oc2NvcmUpLAogICAgICAgICAgICBzdGRldiA9IHNkKHNjb3JlKSkgJT4lCiAgdW5ncm91cCgpCmgyX3NlY19zdW0KYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMyLCBpbiBib3RoIGNhc2VzLCAqKnRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwb3Jvc2l0eSBhbmQgX3NlY3VsYXJfIGV4cGVyaWVuY2Ugd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUqKiAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlcyBhYm92ZSkuIAoKRm9yIGV2ZXJ5IGluY3JlYXNlIG9mIDEgc3RhbmRhcmQgZGV2aWF0aW9uIGluIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIFBvcm9zaXR5IChEdWxpbikgc2NhbGUsIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjJfc2VjX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHN0YW5kYXJkIGRldmlhdGlvbnMgaW4gdGhlaXIgc2VjdWxhciBleHBlcmllbmNlcy4gSW4gY29uY3JldGUgdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgaW5jcmVhc2Ugb2YgYHIgaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJwb3IiXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgUG9yb3NpdHkgc2NhbGUgKHJhbmdlOiAwLTM0KSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgKHN1bW1hcnkocjJfc2VjX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAqIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAidW5ldiJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgVW5jb21tb24gRXZlbnRzIHNjYWxlIChyYW5nZTogMC0xOCkgb3IgYHIgKHN1bW1hcnkocjJfc2VjX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAqIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAiZXhzZW4iXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEV4dHJhc2Vuc29yeSBzY2FsZSAocmFuZ2U6IDAtNykuCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgTWFydGhhIFN0b3J5IHNjYWxlLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciBzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzZWN1bGFyIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMl9zZWNfc3VtJHN0ZGV2W2gyX3NlY19zdW0kc2NhbGUgPT0gIm1tIl0gJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSAocmFuZ2U6IDAtNTQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9zZWNfbW0pJGNvZWZmaWNpZW50c1sibW0iLCAiRXN0aW1hdGUiXSAqIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAidW5ldiJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgVW5jb21tb24gRXZlbnRzIHNjYWxlIChyYW5nZTogMC0xOCkgb3IgYHIgKHN1bW1hcnkocjJfc2VjX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gKiBoMl9zZWNfc3VtJHN0ZGV2W2gyX3NlY19zdW0kc2NhbGUgPT0gImV4c2VuIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBFeHRyYXNlbnNvcnkgc2NhbGUgKHJhbmdlOiAwLTcpLgoKVGhlc2Ugd2VyZSBhY3R1YWxseSAobnVtZXJpY2FsbHkpIF9zdHJvbmdlcl8gZWZmZWN0cyB0aGFuIHdoYXQgd2UgZG9jdW1lbnRlZCBmb3Igc3Bpcml0dWFsIGV4cGVyaWVuY2VzIChQb3Jvc2l0eTogYiA9IGByIHN1bW1hcnkocjJfc2VjX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHZzLiBiID0gYHIgc3VtbWFyeShyMl9wb3IpJGNvZWZmaWNpZW50c1sicG9yIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYDsgTWFydGhhIFN0b3J5OiBiID0gYHIgc3VtbWFyeShyMl9zZWNfbW0pJGNvZWZmaWNpZW50c1sibW0iLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHZzLiBiID0gYHIgc3VtbWFyeShyMl9tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWApLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyfQpoMl9wbG90X2ExIDwtIGRfc3RkX2gyX3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwb3IsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgRHVsaW4gUG9yb3NpdHkgc2NhbGUpIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoMl9wbG90X2IxIDwtIGRfc3RkX2gyX3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwb3IsIHkgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIGh5cG90aGVzaXMgIzI6IE92ZXJhbGwiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDJfcGxvdF9hMSwgaDJfcGxvdF9iMSwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYTIgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gaHlwb3RoZXNpcyAjMjogQnkgc2l0ZSBhbmQgc2NhbGUgKHVzaW5nIE1hcnRoYSBTdG9yeSBzY2FsZSkiLAogICAgICAgeCA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoMl9wbG90X2IyIDwtIGRfc3RkX2gyX3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbSwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gaHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDJfcGxvdF9hMiwgaDJfcGxvdF9iMiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMwoKSGVyZSBhcmUgb3VyIHJlc3VsdHM6CgpgYGB7cn0KZF9zdGRfYnlzaXRlX2gxX3NlYyA8LSBkX3N0ZF9ieXNpdGUgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgdW5ldiwgZXhzZW4sIGFicykgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKHVuZXYsIGV4c2VuKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9ieXNpdGVfaDFfc2VjJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oMV9zZWMkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIzX3NlY191cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjNfc2VjX3VzKQpgYGAKCmBgYHtyfQpyM19zZWNfZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDFfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHIzX3NlY19naCkKYGBgCgpgYGB7cn0KcjNfc2VjX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyM19zZWNfdGgpCmBgYAoKYGBge3J9CnIzX3NlY19jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjNfc2VjX2NoKQpgYGAKCmBgYHtyfQpyM19zZWNfdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDFfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjNfc2VjX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyM19zZWNfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHIzX3NlY19naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyM19zZWNfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHIzX3NlY192dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKSW4gcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMywgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgX3NlY3VsYXJfIGV4cGVyaWVuY2Ugd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgaW4gX2FsbF8gc2l0ZXMqKiwgaW5jbHVkaW5nIFZhbnVhdHUgKHdoZXJlIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBzcGlyaXR1YWwgZXhwZXJpZW5jZSB3YXMgX25vdF8gc2lnbmlmaWNhbnRseSBwb3NpdGl2ZTsgc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlIGFib3ZlKS4gV2UgZGlkIG5vdCBwcm92aWRlIGEgcHJlZGljdGlvbiBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGlzIHdvdWxkIGJlIHRoZSBjYXNlIGluIHRoZSBwcmVyZWdpc3RyYXRpb24uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CmdncGxvdChkX3N0ZF9ieXNpdGVfaDFfc2VjICU+JQogICAgICAgICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpLCAKICAgICAgIGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKyAKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKyAKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzMiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKKFNlZSBvdGhlciByZWxldmFudCBwbG90cyB1bmRlciAiUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMSwiIGFib3ZlLikKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMjIFBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQKCmBgYHtyfQpkX3N0ZF9ieXNpdGVfaDRfc2VjIDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgcG9yLCBtbSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKHVuZXYsIGV4c2VuKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9ieXNpdGVfaDRfc2VjJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNF9zZWMkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI0X3NlY19wb3JfdXMgPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X3NlY19wb3JfdXMpCmBgYAoKYGBge3J9CnI0X3NlY19wb3JfZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19wb3JfZ2gpCmBgYAoKYGBge3J9CnI0X3NlY19wb3JfdGggPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X3NlY19wb3JfdGgpCmBgYAoKYGBge3J9CnI0X3NlY19wb3JfY2ggPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19wb3JfY2gpCmBgYAoKYGBge3J9CnI0X3NlY19wb3JfdnQgPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjRfc2VjX3Bvcl91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjRfc2VjX3Bvcl9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfc2VjX3Bvcl90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjRfc2VjX3Bvcl9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjRfc2VjX3Bvcl92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKSW4gcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNCwgdXNpbmcgdGhlIFBvcm9zaXR5IChEdWxpbikgc2NhbGUsICoqdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBfYWxsXyBzaXRlcyoqLCBpbmNsdWRpbmcgVmFudWF0dSAod2hlcmUgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX2g0X3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwb3IsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICM0ICh1c2luZyBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnI0X3NlY19tbV91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0X3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyNF9zZWNfbW1fdXMpCmBgYAoKYGBge3J9CnI0X3NlY19tbV9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0X3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyNF9zZWNfbW1fZ2gpCmBgYAoKYGBge3J9CnI0X3NlY19tbV90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0X3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNF9zZWNfbW1fdGgpCmBgYAoKYGBge3J9CnI0X3NlY19tbV9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0X3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyNF9zZWNfbW1fY2gpCmBgYAoKYGBge3J9CnI0X3NlY19tbV92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0X3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjRfc2VjX21tX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfbW1fZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjRfc2VjX21tX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfbW1fdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDQpICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgNSwgOCkgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCA5LCAxMikgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAxMywgMTYpICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCAxNywgMjApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDE4LCA0KSksIGJvbGQgPSBUKQpgYGAKCkluIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQsIHVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGUsICoqdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBhbGwgc2l0ZXMgX2V4Y2VwdF8gVmFudWF0dSoqICh3aGVyZSB0aGUgcmVsYXRpb25zaGlwIHdpdGggc3Bpcml0dWFsIGV4cGVyaWVuY2Ugd2FzIGFsc28gX25vdF8gc2lnbmlmaWNhbnRseSBwb3NpdGl2ZTsgc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlIGFib3ZlKS4gV2UgZGlkIG5vdCBwcm92aWRlIGEgcHJlZGljdGlvbiBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGlzIHdvdWxkIGJlIHRoZSBjYXNlIGluIHRoZSBwcmVyZWdpc3RyYXRpb24uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CmRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICM0ICh1c2luZyBNYXJ0aGEgU3Rvcnkgc2NhbGUpIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKKFNlZSBvdGhlciByZWxldmFudCBwbG90cyB1bmRlciAiUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMiwiIGFib3ZlLikKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgIkNvbnRyb2wiIHNjYWxlcyAoSHlwb3RoZXNpcyAjNSkKCkZyb20gcHJlcmVnaXN0cmF0aW9uOiAiU2Vjb25kLCBpbiBvcmRlciB0byBleGFtaW5lIHdoZXRoZXIgdGhlIGh5cG90aGVzaXplZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgZXhwZXJpZW5jZSBhbmQgYmV0d2VlbiBwb3Jvc2l0eSBhbmQgZXhwZXJpZW5jZSBjYW4gYmUgZXhwbGFpbmVkIGJ5IGEgbG93ZXItbGV2ZWwgcHJvY2Vzc2Vz4oCUbmFtZWx5LCBpbmRpdmlkdWFsIG9yIGNyb3NzLWN1bHR1cmFsIGRpZmZlcmVuY2VzIGluIGFuIG92ZXJhbGwgdGVuZGVuY3kgdG8gYWdyZWUgd2l0aCB0aGUgcXVlc3Rpb25zIHBvc2VkIGJ5IHRoZXNlIHNjYWxlcyAoaS5lLiwgYSDigJx5ZXPigJ0gYmlhcyksIHdlIHdpbGwgYWxzbyBleGFtaW5lIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHR3byDigJxjb250cm9s4oCdIHNjYWxlcyAodGhlIFNlbnNlIG9mIENvbnRyb2wgc2NhbGUsIExhY2htYW4gJiBXZWF2ZXIsIDE5OTg7IGFuZCB0aGUgTmVlZCBmb3IgQ29nbml0aW9uIHNjYWxlLCBDYWNpb3BwbywgUGV0dHksICYgS2FvLCAxOTkzKSBhbmQgb3VyIG1lYXN1cmVzIG9mIGFic29ycHRpb24sIHBvcm9zaXR5LCBhbmQgZXhwZXJpZW5jZS4gVGhpcyBwcm92aWRlcyBzb21ldGhpbmcgb2YgYSBuZWdhdGl2ZSBjb250cm9sIGZvciBvdXIgcHJpbWFyeSBoeXBvdGhlc2VzLiBPdXIgcHJlZGljdGlvbiBpcyB0aGF0IGFueSByZWxhdGlvbnNoaXBzIHdpdGggdGhlc2UgY29udHJvbCBtZWFzdXJlcyB3aWxsIGJlIHdlYWtlciB0aGFuIHRoZSByZWxhdGlvbnNoaXBzIGFtb25nIGFic29ycHRpb24sIHBvcm9zaXR5LCBhbmQgZXhwZXJpZW5jZS4gVG8gYXNzZXNzIHRoaXMsIHdlIHdpbGwgc3RhbmRhcmRpemUgc2NvcmVzIG9uIGVhY2ggbWVhc3VyZSwgY29sbGFwc2luZyBhY3Jvc3MgZmllbGQgc2l0ZXMsIGFuZCB0aGVuIGNvbmR1Y3QgYSBtaXhlZC1lZmZlY3RzIGxpbmVhciByZWdyZXNzaW9uLCB1c2luZyBzY29yZXMgb24gYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBjb250cm9sIHNjYWxlcyB0byBwcmVkaWN0IHJlcG9ydHMgb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2VzLiBVc2luZyB0aGUg4oCcc3RhdHPigJ0gcGFja2FnZSBmb3IgUiwgd2Ugd2lsbCBzcGVjaWZ5IHRoaXMgbW9kZWwgYXMgZm9sbG93czogZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICogc2l0ZSAgKyAoMSB8IHN1YmplY3QpLCB3aGVyZSDigJxzaXRl4oCdIGlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgY29tcGFyaW5nIHRoZSBmaXZlIGZpZWxkIHNpdGVzIChlZmZlY3QtY29kZWQpLCBhbmTigJRjcml0aWNhbGx54oCU4oCccHJlZGljdG9y4oCdIGlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgd2l0aCB0aGUgZm9sbG93aW5nIG9ydGhvZ29uYWwgY29udHJhc3RzOiAoMSkgU2NhbGVzIG9mIGludGVyZXN0IChhYnNvcnB0aW9uIGFuZCB0aGUgdHdvIHBvcm9zaXR5IG1lYXN1cmVzKSB2cy4gY29udHJvbCBzY2FsZXM7ICgyKSBhYnNvcnB0aW9uIHZzLiBwb3Jvc2l0eSBtZWFzdXJlczsgKDMpIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIER1bGluIHNjYWxlIHZzLiBwb3Jvc2l0eSBhcyBpbmRleGVkIGJ5IHRoZSBNZW50YWwgQ2F1c2F0aW9uIHNjYWxlOyAoNCkgTmVlZCBmb3IgQ29nbml0aW9uIHZzLiBOZWVkIGZvciBDb250cm9sIChNYXN0ZXJ5IFN1YnNjYWxlKS4gQmVjYXVzZSBvZiB0aGUgdW51c3VhbCBhbmQgY29tcGxleCBmb3JtdWxhdGlvbiBvZiB0aGlzIG1vZGVs4oCUY29uc2lkZXJpbmcgZWFjaCBvZiB0aGVzZSA1IOKAnHByZWRpY3RvcnPigJ0gYXMgcmVwZWF0ZWQgb2JzZXJ2YXRpb25zIG9mIHRoZSB2YXJpYWJsZSDigJxzY29yZeKAneKAlHdlIHdpbGwgY29uZHVjdCBzZXBhcmF0ZSBtb2RlbHMgZm9yIHRoZSB0d28gc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzIChEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgYW5kIFNwaXJpdHVhbCBFdmVudHMpLCByYXRoZXIgdGhhbiBpbmNvcnBvcmF0aW5nIGJvdGggc3Bpcml0dWFsIGV4cGVyaWVuY2VzIG1lYXN1cmVzIGludG8gdGhlIHNhbWUgbW9kZWwgKGFzIGluIEh5cG90aGVzZXMgIzEtNCkuIEFzIGluIEh5cG90aGVzZXMgIzEtNCwgaWYgd2UgaGF2ZSB0cm91YmxlIGZpdHRpbmcgdGhlc2UgbW9kZWxzIG9yIHRoZXJlIGFyZSBvdGhlciBzaWducyBvZiBtb2RlbCBmaXQgcHJvYmxlbXMsIHdlIHdpbGwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZSBtb2RlbDogZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICsgKDEgfCBzaXRlL3N1YmplY3QpLiBXZSBjb25zaWRlciB0aGVzZSB0byBiZSBjb25maXJtYXRvcnkgdGVzdHMsIGFuZCBpbiBlYWNoIGNhc2Ugb3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgdHdvLXdheSBpbnRlcmFjdGlvbiBiZXR3ZWVuIOKAnHNjb3Jl4oCdIGFuZCB0aGUgZmlyc3Qgb3J0aG9nb25hbCBjb250cmFzdCBvbiDigJxwcmVkaWN0b3LigJ0gKGNvbXBhcmluZyB0aGUgcHJlZGljdGl2ZSBwb3dlciBvZiBvdXIgc2NhbGVzIG9mIGludGVyZXN0IHZzLiBvdXIgdHdvIGNvbnRyb2wgc2NhbGVzKSB3aWxsIGJlIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKGIgPiAwLCB0ID4gMiwgcCA8IDAuMDUpLiIKCkFsdGhvdWdoIHdlIGRpZCBub3QgbnVtYmVyIHRoaXMgaHlwb3RoZXNpcyBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLCBJJ20gZ29pbmcgdG8gZ28gYWhlYWQgYW5kIGNhbGwgaXQgSHlwb3RoZXNpcyAjNS4KCmBgYHtyfQpkX3N0ZF9oNSA8LSBmdWxsX2pvaW4oCiAgZF9zdGQgJT4lCiAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlKSAlPiUKICAgIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSksCiAgZF9zdGQgJT4lCiAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBhYnMsIHBvciwgbW0sIGh0aGssIHdvYikgJT4lCiAgICBnYXRoZXIocHJlZGljdG9yLCBzY29yZSwgYyhhYnMsIHBvciwgbW0sIGh0aGssIHdvYikpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpLAogICAgICAgICBwcmVkaWN0b3IgPSBmYWN0b3IocHJlZGljdG9yKSkKCmNvbnRyYXN0cyhkX3N0ZF9oNSRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oNSRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKY29udHJhc3RzKGRfc3RkX2g1JHByZWRpY3RvcikgPC0gY2JpbmQoaW50X2N0bCA9IGMoMiwtMywgMiwgMiwgLTMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfcG1tID0gYygyLCAwLCAtMSwgLTEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3JfbW0gPSBjKDAsIDAsIC0xLCAxLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRoa193b2IgPSBjKDAsIDEsIDAsIDAsIC0xKSkKYGBgCgpfTk9URTogTmVpdGhlciBvZiB0aGUgbW9kZWxzIHdlIHNwZWNpZmllZCBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uIHdlcmUgYWJsZSB0byBydW4uIEkgdGhpbmsgdGhpcyBpcyBkdWUgdG8gYW4gZXJyb3IgaW4gbXkgdGhpbmtpbmcgKGFib3V0IHdoaWNoIG9mIG91ciBtZWFzdXJlcyB3ZXJlICJyZXBlYXRlZCBtZWFzdXJlcyIpLiBUaGUgbW9kZWxzIHJlcG9ydGVkIGhlcmUgYXJlIHZlcnkgY2xvc2UgdG8gd2hhdCB3ZSBwcmVyZWdpc3RlcmVkLl8KCkhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGU6IAoKYGBge3J9CnI1X2RzZSA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKiBwN19jdHJ5LCAKICAgICAgICAgICAgIGRfc3RkX2g1ICU+JSBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpKQojIHN1bW1hcnkocjVfZHNlKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyNV9kc2UpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygxMSwgYm9sZCA9IFQpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGU6IAoKYGBge3J9CnI1X3NlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgZF9zdGRfaDUgJT4lIGZpbHRlcihzY2FsZSA9PSAic2UiKSkKIyBzdW1tYXJ5KHI1X3NlKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyNV9zZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzUqKjogQXMgcHJlZGljdGVkLCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiAic2NvcmUiIGFuZCB0aGUgZmlyc3QgY29udHJhc3Qgb24gdGhlICJwcmVkaWN0b3IiIHBhcmFtZXRlciB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoc2VlIGJvbGRlZCByb3cgaW4gdGFibGVzIGFib3ZlKSwgd2hldGhlciBpbmRleGVkIHNwaXJpdHVhbCBleHBlcmllbmNlcyB1c2luZyB0aGUgRFNFIG9yIFNFIHNjYWxlcy4gSW4gb3RoZXIgd29yZHMsIHRoZSAicHJlZGljdG9ycyBvZiBpbnRlcmVzdCIgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHdlcmUgYmV0dGVyIHByZWRpY3RvcnMgb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgdGhhbiBvdXIgdHdvICJjb250cm9sIiBwcmVkaWN0b3JzLgoKYGBge3J9Cmg1X3Bsb3RfYSA8LSBkX3N0ZF9oNSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGsiLCAid29iIikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUsIHByZWRpY3RvciksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgRFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9Cmg1X3Bsb3RfYiA8LSBkX3N0ZF9oNSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGsiLCAid29iIikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9wbG90X2EsIGg1X3Bsb3RfYiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKYGBge3J9Cmg1X3Bsb3RfYyA8LSBkX3N0ZF9oNSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gInNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoayIsICJ3b2IiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfcGxvdF9kIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrIiwgIndvYiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogT3ZlcmFsbCAodXNpbmcgU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIEV2ZW50cyBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDVfcGxvdF9jLCBoNV9wbG90X2QsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgT3ZlcmFsbCBzY29yZXMKCmBgYHtyfQojIGV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCBhbnkgYXR0ZW50aW9uIGNoZWNrCmRfcGFzc19tYiA8LSBkICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lIAogIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzY29yZSIpICU+JSAKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KIyBleGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVjawpzY29yZXNfcGxvdF9wYXNzX2EgPC0gZCAlPiUgCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBzY29yZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X3dyYXAofnNjYWxlLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLjIsIHdpZHRoID0gMC40LCBhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkX3Bhc3NfbWIsCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNjb3JlcyBmb3IgYWxsIHNjYWxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGx1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrc1xuRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSIpCmBgYAoKYGBge3J9CiMgZXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2sKc2NvcmVzX3Bsb3RfcGFzc19iIDwtIGRfcGFzc19tYiAlPiUgCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCB5ID0gbWVhbiwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X3dyYXAofnNjYWxlLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDIsIHNob3cubGVnZW5kID0gRikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2NvcmVzIGZvciBhbGwgc2NhbGVzICh6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIkV4bHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzXG5FcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDIuMiwgaW5jbHVkZSA9IFR9CiMgZXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2sKcGxvdF9ncmlkKHNjb3Jlc19wbG90X3Bhc3NfYSwgc2NvcmVzX3Bsb3RfcGFzc19iLCBuY29sID0gMSkKYGBgCgpgYGB7cn0KIyBpbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cwpkX2FsbF9tYiA8LSBkMCAlPiUgCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JSAKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiKSAlPiUgCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CiMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKc2NvcmVzX3Bsb3RfYWxsX2EgPC0gZDAgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCB5ID0gc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF93cmFwKH5zY2FsZSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9qaXR0ZXIoaGVpZ2h0ID0gMC4yLCB3aWR0aCA9IDAuNCwgYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZF9hbGxfbWIsCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNjb3JlcyBmb3IgYWxsIHNjYWxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cywgZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzXG5FcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgpgYGB7cn0KIyBpbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cwpzY29yZXNfcGxvdF9hbGxfYiA8LSBkX2FsbF9tYiAlPiUgCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCB5ID0gbWVhbiwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X3dyYXAofnNjYWxlLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDIsIHNob3cubGVnZW5kID0gRikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2NvcmVzIGZvciBhbGwgc2NhbGVzICh6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzLCBldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3NcbkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMi4yLCBpbmNsdWRlID0gVH0KIyBpbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cwpwbG90X2dyaWQoc2NvcmVzX3Bsb3RfYWxsX2EsIHNjb3Jlc19wbG90X2FsbF9iLCBuY29sID0gMSkKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIEhpc3RvZ3JhbXMgZm9yIGVhY2ggc2NhbGUKCiMjIEFic29ycHRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19hYnNfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2Fic190b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMywgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfYWJzX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19hYnNfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMTcsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMzQsIDE3KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJBYnNvcnB0aW9uIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC0zNCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGZpbHRlcihwN19hYnNfY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19hYnNfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2Fic190b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMywgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfYWJzX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19hYnNfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMTcsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMzQsIDE3KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJBYnNvcnB0aW9uIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIGFic29ycHRpb24gc2NhbGUiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC0zNCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIERhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2RzZV90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfZHNlX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19kc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RzZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzNSwgeSA9IDAuMDUsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA3MCwgMzUpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtNzApIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfZHNlX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZHNlX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19kc2VfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RzZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZHNlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDM1LCB5ID0gMC4wNSwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDcwLCAzNSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIERTRSBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTcwKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgU3Bpcml0dWFsIGV2ZW50cwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3NlX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19zZV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3NlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDQ4LCB5ID0gMC4wNSwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDk2LCAyNCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU3Bpcml0dWFsIGV2ZW50cyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtOTYpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfc2VfY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19zZV90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfc2VfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3NlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19zZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSA0OCwgeSA9IDAuMDUsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA5NiwgMjQpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNwaXJpdHVhbCBldmVudHMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gU0Ugc2NhbGUiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC05NikiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFdheXMgb2YgYmVpbmcKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN193b2JfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3dvYl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfd29iX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN193b2JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMCwgeSA9IDAuMDYsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMzYsIDM2LCAxOCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiV2F5cyBvZiBiZWluZyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0zNiB0byAzNikiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3dvYl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfd29iX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN193b2JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3dvYl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAwLCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0zNiwgMzYsIDE4KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJXYXlzIG9mIGJlaW5nIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cyAoZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzKSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMzYgdG8gMzYpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBVbmNvbW1vbiBldmVudHMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN191bmV2X3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN191bmV2X3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAxLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDksIHkgPSAwLjIwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTgsIDkpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlVuY29tbW9uIGV2ZW50cyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMTgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfdW5ldl9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3VuZXZfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3VuZXZfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3VuZXZfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3VuZXZfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gOSwgeSA9IDAuMjAsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxOCwgOSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiVW5jb21tb24gZXZlbnRzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIFVORVYgc2NhbGUiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC0xOCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEV4dHJhc2Vuc29yeQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2V4c2VuX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19leHNlbl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZXhzZW5fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2V4c2VuX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDMuNSwgeSA9IDAuMzAsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA3LCAxKSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJFeHRyYXNlbnNvcnkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTcpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfZXhzZW5fY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19leHNlbl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfZXhzZW5fdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2V4c2VuX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19leHNlbl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjMwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNywgMSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRXh0cmFzZW5zb3J5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIEVYU0VOIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtNykiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEhhcmQgdGhpbmtpbmcKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19odGhrX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19odGhrX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDMuNSwgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMzgsIDM4LCAxOSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGFyZCB0aGlua2luZyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0zOCB0byAzOCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2h0aGtfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2h0aGtfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2h0aGtfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2h0aGtfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMy41LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0zOCwgMzgsIDE5KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIYXJkIHRoaW5raW5nIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cyAoZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzKSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMzggdG8gMzgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBQb3Jvc2l0eQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3Bvcl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfcG9yX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19wb3JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3Bvcl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzNCwgMTcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlBvcm9zaXR5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC0zNCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGZpbHRlcihwN19wb3JfY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3Bvcl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMywgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfcG9yX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19wb3JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMTcsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMzQsIDE3KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJQb3Jvc2l0eSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBQT1Igc2NhbGUiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC0zNCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIE1hcnRoYSBzdG9yeQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X21tX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19tbV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfbW1fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X21tX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDI3LCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDU0LCAyNykpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiTWFydGhhIHN0b3J5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC01NCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGZpbHRlcihwN19tbV9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X21tX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19tbV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfbW1fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X21tX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDI3LCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDU0LCAyNykpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiTWFydGhhIHN0b3J5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIE1NIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtNTQpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIERlbW9ncmFwaGljcwoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiUGFydGljaXBhbnRzIHdobyBwYXNzZWQgYWxsIGF0dGVudGlvbiBjaGVja3MiKQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmopICU+JQogIGNvdW50KHA3X2N0cnkpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiQWxsIHBhcnRpY2lwYW50cyIpCmQwICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmopICU+JQogIGNvdW50KHA3X2N0cnkpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiUGFydGljaXBhbnRzIHdobyBwYXNzZWQgYWxsIGF0dGVudGlvbiBjaGVja3MiKQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2RlbV9zZXgpICU+JQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIGNvdW50KHA3X2RlbV9zZXgpICU+JQogIG11dGF0ZShwcm9wID0gcm91bmQobi9zdW0obiksIDIpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1uKSAlPiUKICBzcHJlYWQocDdfZGVtX3NleCwgcHJvcCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJBbGwgcGFydGljaXBhbnRzIikKZDAgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX3NleCkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgY291bnQocDdfZGVtX3NleCkgJT4lCiAgbXV0YXRlKHByb3AgPSByb3VuZChuL3N1bShuKSwgMikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoLW4pICU+JQogIHNwcmVhZChwN19kZW1fc2V4LCBwcm9wKQpgYGAKCkltcG9ydGFudCB0byBub3RlIHRoYXQgYSBfdmVyeV8gc3Vic3RhbnRpYWwgbWFqb3JpdHkgb2YgcGFydGljaXBhbnRzIGluIFRoYWlsYW5kIHdlcmUgZmVtYWxlLCBhbmQgYSBzbGlnaHQgbWFqb3JpdHkgb2YgcGFydGljaXBhbnRzIGluIFZhbnVhdHUgd2VyZSBmZW1hbGUuCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJQYXJ0aWNpcGFudHMgd2hvIHBhc3NlZCBhbGwgYXR0ZW50aW9uIGNoZWNrcyIpCmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX2FnZSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19kZW1fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtZWFuID0gbWVhbihwN19kZW1fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzZCA9IHNkKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1pbiA9IG1pbihwN19kZW1fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtYXggPSBtYXgocDdfZGVtX2FnZSwgbmEucm0gPSBUKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMobWVkaWFuLCBtZWFuLCBzZCwgbWluLCBtYXgpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJBbGwgcGFydGljaXBhbnRzIikKZDAgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX2FnZSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19kZW1fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtZWFuID0gbWVhbihwN19kZW1fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzZCA9IHNkKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1pbiA9IG1pbihwN19kZW1fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtYXggPSBtYXgocDdfZGVtX2FnZSwgbmEucm0gPSBUKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMobWVkaWFuLCBtZWFuLCBzZCwgbWluLCBtYXgpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCg==